{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-08-28T12:43:57.793158Z",
     "start_time": "2020-08-28T12:43:57.306091Z"
    }
   },
   "outputs": [],
   "source": [
    "import phenograph"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-08-28T12:43:57.972696Z",
     "start_time": "2020-08-28T12:43:57.794461Z"
    }
   },
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Make Random Data Points"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-08-28T12:43:58.034748Z",
     "start_time": "2020-08-28T12:43:57.974510Z"
    }
   },
   "outputs": [],
   "source": [
    "from sklearn.datasets import make_blobs\n",
    "\n",
    "centers = [(-2, -2), (-3,3), (2, 2)]\n",
    "cluster_std = [0.8, 1, 1]\n",
    "\n",
    "X, y = make_blobs(n_samples=150, cluster_std=cluster_std, centers=centers, n_features=2, random_state=42)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-08-28T12:43:58.152693Z",
     "start_time": "2020-08-28T12:43:58.036743Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXIAAAFlCAYAAAD292MqAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nO3df2wc5Z3H8c/aXl9tDjAII4gTLtCIxFgpNlkUpPSPJiVJS2lJE65wSqWqLUKtQCrlFClIp8LpDuLyQ5eoVEL+A4qg0N7RKtAEQtu4UCkqRVsMhKZFlUqOeCsko8MNJA7ZOHt/mDX2emZ3fs/zzLxf/7Q4G+/EPz7zzHe+z3cKtVqtJgCAtdrSPgAAQDgEOQBYjiAHAMsR5ABgOYIcACxHkAOA5TrSeNPzzjtPS5cuTeOtAcBahw8f1rvvvrvg46kE+dKlS1Uul9N4awCwVqlUcvw4pRUAsBxBDgCWI8gBwHIEOQBYjiAHAMtFEuSTk5O6/vrrtWLFCvX39+t3v/tdFJ8WAOBBJO2H3/nOd/S5z31OTz31lE6ePKnjx49H8WkBAB6EDvKjR4/qt7/9rX70ox9Jkjo7O9XZ2Rn20wIAPApdWvnrX/+q3t5eff3rX9fQ0JBuuukmHTt2bMHrRkZGVCqVVCqVNDExEfZtAQAfCR3kp06d0iuvvKJvf/vbGhsb0xlnnKHh4eEFr7v55ptVLpdVLpfV29sb9m0BAB8JHeSLFy/W4sWLtXr1aknS9ddfr1deeSX0gQHItt1jFa0ZHtXF2/dqzfCodo9V0j4ka4UO8gsuuEBLlizRm2++KUnav3+/LrvsstAHBiC7do9VdMfPD6oyOaWapMrklO74+UHCPKBIulZ+8IMfaOvWrTp58qQuueQSPfLII1F8WgAZdd/zb2qqOj3vY1PVad33/JvaNNSX0lHZK5IgHxwcZJohAM/+Njnl6+NoLpUxtphv91hF9z3/pv42OaVFPV3atnE5qxJk2qKeLlUcQntRT1cKR2M/tuinjFoh8mjbxuXqKrbP+1hXsV3bNi5P6YjsRpCnrFmtEMiqTUN92rF5pfp6ulSQ1NfTpR2bV3IlGhCllZRRK0RebRrqI7gjwoo8ZW41QWqFALwiyFNGrRBAWJRWUla/tKRrBUBQBLkBqBUCCIMgtww95wAaEeQWqfec19sV6z3nkghzIMe42WkRes4BOCHILULPOQAnBLlF6DkH4IQgtwg95wCccLPTIvScA3BCkFuGnnMAjSitAIDlWJHnEJuKgGwhyHOGTUVA9lBayRk2FQHZQ5DnDJuKgOwhyHOGTUVA9hDkOcOmIiB7uNmZM2wqArKHIM8hNhUB2UJpBQAsx4ocC7BhCLALQY552DAE2IfSCuZhwxBgH4Ic87BhCLAPQY552DAE2IcgxzxsGALsw81OzMOGIcA+BDkWYMMQYBdKKwBgOYIcACxHkAOA5aiR+8DWdQAmIsg9Yus6AFNRWvGIresATMWK3KO0t65T1gHghhW5R2luXa+XdSqTU6rp47LO7rFK7O8NwHwEuUdpbl2nrAOgGUorHqW5dT3tsg4AsxHkPqS1dX1RT5cqDqFdL+tQPwfyjdKKBZqVdaifAyDILbBpqE87Nq9UX0+XCpL6erq0Y/NKbRrqo34OgNKKLdzKOtTPAbAitxxP9AFAkFuOJ/oAoLRiOZ7oA4AgzwCe6APkG6UVALBcZEE+PT2toaEhXXvttVF9SgCAB5EF+a5du9Tf3x/VpwMAeBRJkI+Pj2vv3r266aabovh0AAAfIgny2267Tffee6/a2ii5A0DSQifvnj17dP7552vVqlVNXzcyMqJSqaRSqaSJiYmwbwsA+EihVqvVwnyCO+64Q4899pg6Ojp04sQJHT16VJs3b9bjjz/u+ndKpZLK5XKYt7USUwoBhOGWnaGDfK4XXnhB999/v/bs2RPoYLKs8eHN0swOzPrwq6jegxMFkF1u2cmGII/ChmSzKYVRhG3jiaI+zlYSYQ5kXKR3Jz/zmc+0XI3bKIqZ33FPKbzrmT8yzhbIKdpMPIhi5necUwp3j1U0OVV1/LM4x9nuHqtozfCoLt6+V2uGR3mYBZASgtyDKFbTraYUhgnFZieUuMbZ8mQiwBwEuQdRrKabPeUnbCg2O6HENc6WJxMB5uBm50ea3czctnG5Y8eJ35B0m1IY9kao28OZz+kuxnajkycTAeZgRa7WZYJmq+kohA1Ft7LNnV8cCH1sbngyEWAOVuTytiKOc+a324raayim8XCJqK5SAIRHkCv9MkEUoZj0wyV4MhFgDoJc4VfEYdkaijyZCDADQS7nFXGxraD3jn2opdv3Spq5cXjnFwdiCy5CcSFGDgDeEORauCI+u6uooyeqqlY/HkPz3vGqtj312rzXIz6MHAC8I8g/MndFvGZ41HGnZHW6FtlsFDcmrkLTOKa4Z9MAWUKQO2h2kzPuLe9+VqFJBGxaK+O0b0ADNqGP3EGzm5xx3gB1W4Xe9tNXF2zbd+p9/+5PX9XSiOeepLWDkz51wDuC3MG2jctVbCss+HixvRBrn3Sz1WbjJiWngK25vDaOY4p7ZdxqNg2AjxHkDjYN9em+f75cPV3F2Y+d013UfddfHms5oae72PTP566EWwWp06o5yGCutFbGce+mBbKEGrmLpNsBd49V9MGJUy1fVw9wt953p9fWP3+QWneaOzhpyQS8YUUeobCjaKunWz91r74Sdio9uL22/vmD1LpZGQPmy+SKPI12ubDdHV5qznNXwnN73yuTUyro4xp542ubfX4v78vKGDBb5oI8iXY5pxNFXKNo2wsFna7VHE9IcwO21ckr7TEEQZnYVw+YJnNBntZDjhvfs87PKFqnWrTXMkarVbON0wrZ3ZkPnKzDy1yQx90u53aiaC8UNF1bWOM2ZRStjYO52N0ZLxMClJN1NDIX5G4lhLZCQbvHKqF/ONxOCNO1mrqK7UaPorWt1s3uzviYEqBRnaxNOCmlKXNdK27dHNO1WiSbZNxW2PVuDro7osPuzviY8szVKE7WJj0IPEznWhiZC/J6u1x7YeHOzCh+UJvtONw01KcD29fpreEv6MD2dYR4SOzujI8pVztRnKxNOSmleUKxJsj9nOk2DfXptEO9Wgr/g0pfdXL4WsfHlKudKE7WppyU0jyhWFEjD1LPi7PdzsRac7Maoc31QxO/1llgShdTFDfhTWmtTfOEYkWQB7khYsoPahKanegkGXFTC94lceI1qYsp7MnalN/1NE8oVgR5kDOdST+ocWt1SUcLnz2S7CZJ+2onqhOWKb/raZ5QrAjyoGe6tH9QkxLkREcLn5mi7p2fG5Y93UXVatLfp6qpL2yiPmGZ8Lue5gnFiiA35dLJVK1OdCbUD+FNlHXWxrB87/jHjy9Mu8SW1c1eaZ1QrOhaoXuhuWZ3/mnhs0uU3SROYTlXGi160swJxm0EM1eKwVixIpfMuHQylZdLurTrh/AmyqtPL6HY+Jq4b7TWrxLccKUYjDVBjuaaneg4Cdojyjqrl4ePzA3OJG60NrtK4EoxOII8JJt7tGGmqE68a1f06scvvS23x5U0BmcSdetmVwmUS4MjyEMwZfAQ0Gj3WEU/+0NlQYh3F9s0VT3tuOgIc6PV64LG7Sqhr6fL8+8Mi6eFCPIQsnrnHfZzK2Gcc8Y/6ND2dY5/J2ibr58FTZB7AHOD++yuoo6dPKXqdK3le6UljRONFV0rUYl6MpkpMx6ARkF+Nt06nNau6G36e+NnxojfDrTGQVSTU9XZEG/1XmlIa3BWblbkcZRBTJnxADQK8rPpdKN17Ype/ewPlaa/N15OGkFXqa1aKJ3eK01pXaXnJsjj+AKzUQmmCvqz2Xijdc3waMvfm1YnDbdFVPl//0+/+fNE03D3GtCmLJ7SukrPTWklji9wWhuV0hpeD3tE9bPp5fem1aYzt0XUj196u2UJwktAm7R4Sms8cG5W5HGVQZLu0aZTBpK3UkUUP5tefm9a9b67nQwaO2qcrpCdriyKbQX94yc6NHk8/ZkxjdK6Ss9NkIf5ApvU7kSnDJI8mXv9vWl20vCyMamuMfRNmWzoVVrHm5sgD/oFNm0FTKcMkjyZRxFMTieDghauyCXnK+Q0dyYHWcSlcby5CXIp2BfYtBUwnTJI+mQeNpi8dMNIZtW6JfMWcc3kKsiDMG0FTKcMbDyZO50MSv90rtElE9MWcc0Q5C2Y9ktjW80Q0cvKyTzISj/J+1WmLeKaIchbMPGXxu0XwKSbsohPXk/mSZc6TFvENUOQt5DUL03YELapnofw8jiaOOlSh4mLODcEuQdx/NI0PkvxgxOnVD0dfBCQTfU8xC+LV2dp3OSV7LjyIch9iuIXpNmzFOv8hnBa9bwsBoYbW/6tWb06S6PUYcuVT2626EchqslmcQwC8rs1OIpt/mlNekuDTf9WP9MIbRr3wPNn3RHkPvj5BWkmjkFAfn7I4zwhmTRSNEo2/Vu9Xp3ZdHKSeAh7M5RWfIiqfOFly7LflYafel6rUPJaPrCpPSssm/6tXkoQu8cq+tf/fk3TNefZ3qaGoy2ljqQR5D5EVaNzHATUXtAZnR36+1TwQUBef8jdwqe+IvNaW7WpPSssm/6trbot6ivxxhCvM/HkhOZCl1aOHDmitWvXqr+/XwMDA9q1a1cUx2WkqGp0TpeI911/uV69c4PeGv6CDmxfF+uqwy182gsFX+WDPNUsbfq3tipBtLpHY+LJySubav5RCr0i7+jo0AMPPKArrrhC77//vlatWqX169frsssui+L4jBJlO1Kal4huKza3X263FZpN7Vlh2fZvbfbz1WzFberJyYusdut4ETrIL7zwQl144YWSpDPPPFP9/f2qVCqZDHIpGzU6t1C67/k3Az0ezPavh1cm/luDtES6lYnaCwWrbx7meS9FpDXyw4cPa2xsTKtXr17wZyMjIxoZGZEkTUxMRPm2CMAtlGzZyYbgK1C3KzKbQ1yy64Z01CJrP/zggw+0ZcsW7dy5U2edddaCP7/55ptVLpdVLpfV29sb1dsiQrR32cVtBfqv//1a0xpxVr/PaT1mzQSRrMir1aq2bNmirVu3avPmzVF8SriIe3ehieUDOHNbada7UZqt0LP4fbZpNkrUQgd5rVbTN7/5TfX39+v222+P4pgwx9zgPrurqGMnT6k6HXwmC7LDy36EvNSIJftuSEcpdJAfOHBAjz32mFauXKnBwUFJ0j333KNrrrkm9MHlXWMNdHIq/EwWZIfTCtRJHmrEdVm80vAidJB/+tOfVs1lYwHC8TqTpTI5pTXDo5GsQmwZDIWFK9C2QsFxk09PdzHpQ0PC2NlpMK8rqYI0e4kdptyS5z5cW81dge4eq2jbU6/Nlt7qPjhxSrvHKnwPM4yhWQbzcrfd6WnkQYc52TQYCgttGurTGZ0L12bV0zW+hxnHilzmlhMcZ7K0FfSPn+jQ5PFq05tdQeqiee7DNVGQn8u/O9xHkfgeZl3ug9zkcoKXu/BrhkcjG+Zk02CorAv6c8n3MJ9yX1oxvZywaahPB7avcx2mFeUwpzgGQ+V1iFFYQX8ukx7uxffXDLlfkdteToh6kFdUn0sy+2rHdEF/LpPspeb7a47cB3kWLkWj7J2N8nPleYhRWGF+LpPqpeb7a47cl1ZsmjNtG9uvduLgtRRhws9lq2Pl+2uO3K/Ig16KmtrpYpIsXO1EyU8pIu3t5l6Ole+vOXIf5JL/S1Fqg97keYiRE7+liDS3m3s5Vr6/5iDIA6A26E3aq0rT2FSK8HKsbt9fSZGNjIA3BHkANv1Cpi2vQ4yc2FSK8Hqsjd9fp6vV2376qu565o+660sD/CzEhCAPwKZfSJjDpFJEq3s8Xo+18fMc+/CU46C3yakq5ccY5b5rJQgTOgpgH1OezFNfNVcmp1TTx/d45naleDlWp8/jNGq5bqo6rdt++iobh2JQqKUwg7ZUKqlcLif9tpGiawW2chvr0NfTpQPb14X+PF4k9YzQrP2eumUnpZWAqP3CVlHd4wlzTyiJ5oA8dZdRWgFyJqqHFLu9/pzuos7x8DCLuJsDTJ+jFCWCHMiZqO7xuH2eO784oLHvbdDOGwbV1+TkEHdzQJ66ywhyIGeiuuna6vPUJ3fuvGEwleaAqK48bECNHMihqO7xePk8aW0MM6ndM24EOYDYpdEckKedxQQ5kLKstciZJC/dZQQ5kKI8tcghPtzsBFKUpxY5xIcVOYyRxxJDnlrkEB+CHEbIa4nB9gFseTz5mojSCoyQ1xKDzQPYvAzfQjIIchghryUGUyYiBpHXk6+JKK3ACLaXGMKwtUUurydfE7EihxFsLjHkVZ62wJuOIIcRbC4x5FWWTr67xypaMzyqi7fvtfLBF5RWYAxbSwxZ5KUbJStb4LPQMUWQA5jHT7Bl4eTb7KatLf82SisA5slbN0oWbtoS5ADmyUKw+ZGFm7YEOYB5shBsfmThpi1BDmCeLARbK3O7VO57/k1tWdU3+1i69kJhtpRkS/cKQQ5gnqy3gjqNFvjZHypau6JXXcV2TddqkuwaOUDXCoAFstCN4sbtZu6Tvz8yG+JzP25D9worcgC54nbTtjHEW73eJAQ5gFxxu2nbXij4er1JCHIAueJ2M/dfVi+x9iYvNXIARon7YRXNRguU/ulcK0cOFGo1l8JQjEqlksrlctJvC8BwjeMBpJlVcZa6ZsJwy05KKwCMkbfxAFEhyAEYI2/jAaJCkAMwRt7GA0SFIAdgjDyMB4gDXSsAjJGVh1UkjSAHYJQsjweIC0EOADGLuzeeIAeAGCXxTFBudgJAjJLojWdFDgARcSqhJNEbH8mKfN++fVq+fLmWLVum4eHhKD4lAFjF6YEVd/z8oM7uKjq+Psre+NBBPj09rVtuuUXPPfecDh06pCeffFKHDh2K4tgAwBpuJZRCQbH3xocO8pdfflnLli3TJZdcos7OTt144416+umnozg2ALCGW6lk8ng19kfnha6RVyoVLVmyZPa/Fy9erN///vcLXjcyMqKRkRFJ0sTERNi3BQCjLOrpUsUhzBf1dMXeGx96Re40Bbfg8KSNm2++WeVyWeVyWb29vWHfFgCMkuZ4gdAr8sWLF+vIkSOz/z0+Pq5FixaF/bQAYJU0xwuEDvIrr7xSf/nLX/TWW2+pr69PP/nJT/TEE09EcWwAYJW0xguEDvKOjg49+OCD2rhxo6anp/WNb3xDAwMDURwbAMCDSDYEXXPNNbrmmmui+FQAAJ/Yog8AliPIAcByBDkAWI4gBwDLEeQAYDmCHAAsR5ADgOV4sESOxP3cQADpIMhzIonnBgJIB6WVnEjiuYEA0kGQ50QSzw0EkA6CPCfcng8Y5XMDAaSDIM+JNIfeA4gXNztzIs2h9wDiRZDnSFpD7wHEiyCHJ1570OlVB5JHkKMlrz3oXl5H0APR42YnWvLag97qdfWgr0xOqaaPg373WCXW4weyjiBHS1570Fu9jk1JQDwIcrTktQe91evYlATEgyBHS1570Fu9zi3o2woFXbx9r9YMj1JmAQIgyNHSpqE+7di8Un09XSpI6uvp0o7NKxfcpGz1Oqegl6TpWo2aORBCoVar1ZJ+01KppHK5nPTbwgBzu1baCgVNO/z49fV06cD2dSkcHWA2t+yk/RCJmrsp6eLtex1fQ80c8IfSClLDIC8gGgQ5UsMgLyAalFaQGgZ5AdEgyHPKlK3yDPICwiPIc4jndwLZQpDnULOt8mEmGpqyygfyhiDPIT9b5Z1W79v+5zX9+y/+qMnj1dnAlsQqH0gJQZ5Di3q6VHEIbae2P6fVe/V0Te8dr0r6OLA/UWzztcpvhdU94B3thznkp+3Py+acqer0bLAH+fuNGHcL+EOQu9g9VtGa4dFMDnPyOjtFCr85J8jfZ9wt4A+lFQd56Orw2va3bePyeV8LNz1dRX146vS81wXd3MO4W8AfgtyB366OLGvctHN2V1HHTp5SdfrjYVddxXbd9aWBea8LU9f2U8NvRG0deUSQO2BFOF/j6r1ZWEYRmk5XAV5W93m4kgKcEOQOwqwI8yDu3ZhBt+5zJYW8IsgdBF0RIjpBThZcSSGvCHIHWRvmlJe6MVdSyCuC3EVWhjm51Y3L//t/+s2fJzIV7lxJIa8I8oxzqxs//tLbs/+dlZuCWbuSArwiyDPOa304KzcFs3IlBfjBzs6M81Mf5qYgYCeC3DJ+Rwc4zVVxw01BwE6UViwSZMNLY924rVDQdK224HUFafamYF66XICsKNRqDr/VMSuVSiqXy0m/rfXWDI86tte1Fwo6Xat5Ct3Gk4E0E+Jbr7pI/7lppeOfdxXbXYdqRYkTCNCcW3ayIreIWw27vsIOskJvDMyguyPDhjDb64HgCHKLuG14mctL6Dbr7AiyOzKKEGZ7PRAcNzsNN/fm5rEPT6nYXmj5d8J0n7jd8Gx2IzSK+eFsrweCY0VusMaV7uRUVcW2gs7pLmryeNX1xmWY7pMguyODruLnlmLO7ipqcmrhU4bopAFaI8gN5va8zO7ODo19b4Prjclmoduqlh1kd6TfGSdOpZhie0HFtoKqp+fPOWd7PdAaQW6wVitdv6HrtZbtd3ek31W84wlquqZzuovq7uygawXwKVSQb9u2Tb/4xS/U2dmpT37yk3rkkUfU09MT1bHlnpeVrp/QjeuGot8TitsJavJ4VWPf2xD4OIC8CnWzc/369XrjjTf0+uuv69JLL9WOHTuiOi7I39PuvYjzhuKmoT4d2L5Obw1/QQe2r2tZivHzcQDNhQryDRs2qKNjZlF/1VVXaXx8PJKDwgw/T7v3wpQAjfoEBeRdZDXyhx9+WDfccENUnw4fiXKanynzuhk3C0SrZZBfffXVeueddxZ8/O6779Z11103+/87Ojq0detW188zMjKikZERSdLExETQ40UIaQSoW5cM42aB6ISetfLoo4/qoYce0v79+9Xd3e3p7zBrJR/SnNsCZFEss1b27dun73//+3rxxRc9hzjMkMSAKrbdA8kIFeS33nqrPvzwQ61fv17SzA3Phx56KJIDQ3ya9ZNL7qUXv+Gf1LZ7piYi7xhjmyP1wHMbvHVOd1EnqqcXjLitSerpKurYyVOqTtcW/J07vzjgGJxuY3f7erp0YPu6UP+WOso3yBPG2OZE4+p07Ype/ebPE6pMTs2Gspv3ji+cdVJ/vdMclPrfcZt0mESXDOUbgOmHmVJfnVYmp1TTTMnk8Zfenl0Vx3Xp5TbpMOo+eCdMTQRYkWeK0+rUq65iu/6ho8115d3K3yanmrYaxsXvwC4gi1iRZ0jQVWh9pXzXlwY8P6i5UU93ccHVwB0/P9jy4dBhsUsUIMgzxe8qtPERFXNLIU5/XmwrqLu48Eemq9iuWk2hHy4RRBLlG8B0BHmGbNu4vOUThApz/rdeM5+7eq4Pvzo8/AX91w2D8wLyvn++XIf+4/Pa2fDxHZtX6u8uJRlq1UD8aD9MQZx9z4P//kvXOnffR+/l1oIYpi0wiVZDJ7QfIk/cspMVecKcOkuirCW7rYwL0ux42Tg6PdKqVUfxvFDAdgR5wuIOHi+jauMYZ1uvVfd0FWc/9gmHenrUaD8ECPLExR08XlbGca6ePzx1evb/1zcLxdm5YsqMdSBNBHnCWgXP7rGK1gyP6uLte7VmeNR3CHrp4oir0yONMgfthwAbghLXbNu614cjt+JlE04cG3XSKHPwkAqAIE9cs+BZMzxq9dyQtHZZ8pAK5B1BngK34LH9xp0pj5ID8oYauUFsv3HHLksgHazIDZKFFS1lDiB5BLlBuHEHIAiC3DCsaAH4RZDDE56LCZiLIEdLUfW3A4gHXStoicFUgNkIcrRke387kHWUViyUdL06zh2b1N6B8FiRWybueeZO4hpMlca/BcgigtwyadSrszQtEcgiSiuWSatenZVpiUAWsSK3jO3zWObK0r8FSBNBbplm9eqwD6VIGg+FAKJBacUybvNYJCWyaSfKLhNmywDRKNRqtVrSb1oqlVQul5N+20xbMzzq2CLY19OlA9vXuf49P8HcuMNTmllBM6oWSIZbdlJayYggNw79tv/RZQKYiSDPiCA3Dv0GM10mgJkI8owIcuPQbzDTZQKYiSDPiCCbdvwGM10mgJnoWskQv5t2/D5aji4TwEwEeY4FCWaeYASYhyDPuaiDmWmGQPIIckSGJwkB6eBmJyJDnzmQDoIckaHPHEgHpRWEVq+Lu816oM8ciBdBjlD+bfdB/filt11DnD5zIH4EOXyrr8CdhnTN1UfXCpAIghy+OE1AdFKQmk5dBBAdbnbCF6fOFCfUxYHkEOTwxUsHSkGiLg4kiCCHL61W2gVJW6+6iLo4kCCCHL44TUAsfPS/fT1d+q8bBvWfm1Ymf2BAjnGzE74wAREwD0EO35iACJiF0goAWI4gBwDLEeQAYDmCHAAsF0mQ33///SoUCnr33Xej+HQAAB9CB/mRI0f0q1/9ShdddFEUxwMA8Cl0kH/3u9/Vvffeq0Kh0PrFAIDIhQryZ555Rn19fbr88sujOh4AgE8tNwRdffXVeueddxZ8/O6779Y999yjX/7yl57eaGRkRCMjI5KkiYkJn4cJAHBTqNVqbg93aergwYP67Gc/q+7ubknS+Pi4Fi1apJdfflkXXHBB079bKpVULpeDvC0A5JZbdgYO8kZLly5VuVzWeeed1/K15513npYuXRrF2yZqYmJCvb29aR9GqvgazODrMIOvw4ykvg6HDx927A5MZdaKrW2KXEnwNajj6zCDr8OMtL8OkQX54cOHo/pUAAAf2NkJAJZrv+uuu+5K+yBssmrVqrQPIXV8DWbwdZjB12FGml+HyG52AgDSQWkFACxHkAeQ9yFh27Zt04oVK/SpT31KX/7ylzU5OZn2ISVq3759Wr58uZYtW6bh4eG0DycVR44c0dq1a9Xf36+BgQHt2rUr7UNKzfT0tIaGhnTttdemdgwEuU8MCZPWr1+vN954Q6+//rouvfRS7dixI+1DSsz09LRuueUWPffcczp06JCefPJJHTp0KO3DSlxHR4ceeOAB/elPf9JLL72kH/7wh7n8OkjSrl271N/fn+o2TF0AAAIpSURBVOoxEOQ+MSRM2rBhgzo6ZjpXr7rqKo2Pj6d8RMl5+eWXtWzZMl1yySXq7OzUjTfeqKeffjrtw0rchRdeqCuuuEKSdOaZZ6q/v1+VSiXlo0re+Pi49u7dq5tuuinV4yDIfWBI2EIPP/ywPv/5z6d9GImpVCpasmTJ7H8vXrw4lwE21+HDhzU2NqbVq1enfSiJu+2223TvvfeqrS3dKE1lZ6fJohoSZrtmX4frrrtu9v93dHRo69atSR9eapyavPJ8dfbBBx9oy5Yt2rlzp84666y0DydRe/bs0fnnn69Vq1bphRdeSPVYCPIGv/71rx0/fvDgQb311luzq/Hx8XFdccUVnoaE2cjt61D36KOPas+ePdq/f3+ugmzx4sU6cuTI7H/Xh8XlUbVa1ZYtW7R161Zt3rw57cNJ3IEDB/TMM8/o2Wef1YkTJ3T06FF99atf1eOPP574sdBHHpCfIWFZs2/fPt1+++168cUXczcw6dSpU7r00ku1f/9+9fX16corr9QTTzyhgYGBtA8tUbVaTV/72td07rnnaufOnWkfTupeeOEF3X///dqzZ08q70+NHL7deuutev/997V+/XoNDg7qW9/6VtqHlJiOjg49+OCD2rhxo/r7+/WVr3wldyEuzaxGH3vsMY2OjmpwcFCDg4N69tln0z6s3GJFDgCWY0UOAJYjyAHAcgQ5AFiOIAcAyxHkAGA5ghwALEeQA4DlCHIAsNz/AyjJLMcIUDvMAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x432 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots(figsize=(6, 6), facecolor=\"white\")\n",
    "\n",
    "ax.scatter(X[:, 0], X[:, 1])\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Run PhenoGraph"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-08-28T12:43:58.156003Z",
     "start_time": "2020-08-28T12:43:58.154015Z"
    }
   },
   "outputs": [],
   "source": [
    "import phenograph"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-08-28T12:43:58.838150Z",
     "start_time": "2020-08-28T12:43:58.157535Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Finding 30 nearest neighbors using minkowski metric and 'auto' algorithm\n",
      "Neighbors computed in 0.10402417182922363 seconds\n",
      "Jaccard graph constructed in 0.0720210075378418 seconds\n",
      "Wrote graph to binary file in 0.008857011795043945 seconds\n",
      "Running Louvain modularity optimization\n",
      "After 1 runs, maximum modularity is Q = 0.664858\n",
      "Louvain completed 21 runs in 0.3088071346282959 seconds\n",
      "Sorting communities by size, please wait ...\n",
      "PhenoGraph complete in 0.67525315284729 seconds\n"
     ]
    }
   ],
   "source": [
    "communities, graph, Q = phenograph.cluster(X, k=30)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-08-28T12:43:58.845167Z",
     "start_time": "2020-08-28T12:43:58.840438Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 2, 2, 2, 2, 1, 0, 2, 2, 0, 1, 2,\n",
       "       1, 1, 1, 2, 2, 0, 2, 1, 2, 0, 0, 0, 2, 0, 1, 0, 2, 1, 1, 1, 0, 1,\n",
       "       2, 2, 2, 0, 1, 0, 1, 0, 0, 1, 2, 2, 0, 0, 1, 2, 0, 1, 1, 0, 2, 0,\n",
       "       0, 2, 1, 2, 1, 1, 2, 0, 0, 1, 1, 2, 1, 2, 0, 1, 1, 0, 2, 1, 2, 1,\n",
       "       1, 2, 2, 0, 2, 2, 1, 0, 0, 0, 1, 1, 2, 1, 2, 0, 1, 2, 1, 0, 2, 2,\n",
       "       0, 2, 0, 2, 1, 2, 2, 0, 2, 1, 2, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0,\n",
       "       2, 0, 0, 2, 1, 1, 2, 2, 1, 1, 2, 1, 1, 0, 1, 0, 2, 2])"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "communities"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-08-28T12:43:58.850576Z",
     "start_time": "2020-08-28T12:43:58.847827Z"
    }
   },
   "outputs": [],
   "source": [
    "color_map = {0: \"navy\", 1: \"orange\", 2: \"gray\"}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-08-28T12:43:58.855856Z",
     "start_time": "2020-08-28T12:43:58.852594Z"
    }
   },
   "outputs": [],
   "source": [
    "colors = list(map(lambda x: color_map[x], communities))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Plot Clusters"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-08-28T12:43:58.995406Z",
     "start_time": "2020-08-28T12:43:58.858551Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXIAAAFlCAYAAAD292MqAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nOzdeXxTZfY/8M9NcpM0aboALW2hQDdLW2gLtFCg7CCrqKwiCoKI4jI6uP0cvzrqjDPOuI2jjoqgDjgoiwjKJkvZKWUrlNJCKy3dSzfokjTNzb3390dsJCQtLU2apj3v12ter+Hm9t7TxZMnzz3PeRhRFEUQQghxWRJnB0AIIaRtKJETQoiLo0ROCCEujhI5IYS4OErkhBDi4iiRE0KIi5M546Y9evRAv379nHFrQghxWVevXkVFRYXVcack8n79+uH06dPOuDUhhLisuLg4m8dpaoUQQlwcJXJCCHFxlMgJIcTFUSInhBAXR4mcEEJcnF0S+Y0bNzBnzhz0798fERERSE5OtsdlCSGEtIBdyg+fffZZTJkyBZs3b4bBYIBOp7PHZQkhhLRAmxN5TU0NDh8+jG+++QYAIJfLIZfL23pZQgghLdTmqZWcnBz4+PhgyZIlGDRoEJYtWwatVmt13qpVqxAXF4e4uDiUl5e39baEEEJ+0+ZEbjQacfbsWaxYsQKpqalQq9V45513rM5bvnw5Tp8+jdOnT8PHx6ettyWEuDBRFJGWloZvvvkGX3/9Nc6ePQue550dlstq89RK79690bt3bwwbNgwAMGfOHJuJnBBCGv3www/IysoCx3EAgJKSEmRkZGDhwoVgGMbJ0bmeNo/I/fz8EBgYiMuXLwMA9u/fj8jIyDYHRgjpnIqLiy2SOABwHIf8/Hzk5uY6MTLXZZeqlY8//hgLFy6EwWBAcHAwvv76a3tclhDSCV29ehWCIFgd5zgOubm5CA4OdkJUrs0uiTw2Npa6Gd4hURSxb18OfvzxEtRqORYvjsGAAb7ODosQh1GpVJBIJFZz4jKZDGq12klRuTantLElJqIo4oEHfsCOHVnQajlIpQw+/fQk3n//bqxYEe/s8AhxiIiICOzevdvqOMMwGDhwoBMicn20RN+Jdu/+1ZzEAYDnRdTXG7Fy5R5UVNCiKtI5KRQKPPzww3B3dzevO1GpVHjwwQdpRH6HaETuRJs2ZZiT+M1YVoK9e69gwQIanZDOqVevXli5ciVKSkogCAICAgIgkdC48k5RIncilYqFRMJAEESr15RK+tWQzo1hGAQEBDg7jE6B3gKdaPHiGJsJWxSByZNDnRARIcQVUSJ3ovj4Xnj99TFQKKRQq1loNHKo1Sy2bXsAKhXr7PAIIS6CPr872csvj8RDDw3Enj1XoFKxmD79Lri7U9MxQkjLUSLvAHr18sCSJYNue57BwOPHHzNx5kwJ7rqrO+bPj4JGo2iHCAkhHRklchdRWalDQsJqlJZqUVdngFrN4pVX9uP48aUIC+vu7PAIIU5Ec+Qu4pVX9iMvrxp1dQYAgFbLoaqqHkuX/uTkyAghzkaJ3EVs3pwBjrPsTyEIIk6cKIROZ12LTgjpOiiRuwiptOlflURCbT8J6cookbuIhx4aCIVCanFMKmUwYUIQLR4ipIujRO4i/vKX8RgwwBfu7nLI5VJoNHL07u2BNWtmOjs0QoiT0VDORbi7y3Hq1GNISsrF+fPXEBLijWnTwsCy0tt/MSGkU6NE7kIYhsGECcGYMIEa7xNCfkdTK11Mbu51zJixHnL5X+Du/jc8/vh21NY2ODssQkgb0Ii8C7lxQ4+hQ1ejqqoegiCC4wT897/ncP58KZKTH6VNbwlxUTQi70LWrj0PnY6zaJvb0MAjPb0MKSlFToyMENIWlMi7kLNnS5pcPJSRUd7O0RBC7IUSeRcSG+sHlcr2bFr//j3aORpCiL1QIu9CFi+OgZsba7ESVC6XIiKiB4YP7+3EyAghbUGJvAvx9nZDSsoyTJgQBKmUgVIpw8KFA7Fv3yJ60EmIC6OqlS4mJKQb9ux5GKIoUvImpJOgEXkXRUmckM6DEjmxkJd3A088sR1RUZ9ixoz1OHo039khEUJug6ZWiNmVK1UYMmQVtFoORqOAjIwKHDhwFV9/fS/mzYtydniEkCbQiJyYvfbaAdTWGmA0/r6BhU7H4emnd4LnhWa+khDiTJTIidnBg1ctVn020moNKCqqdUJEhJCWoEROzHx91TaP87wILy9lO0dDCGkpSuTE7OWXR0KtZi2OKZVS3H9/f3h4KJwUFSHkdiiRE7MHHhiAV15JhJubDB4eCiiVUtx9dyhWr6ZdiAjpyKhqhZgxDINXXx2NZ59NQFZWJQICNPDzc3d2WISQ26BETqy4u8sxeLC/s8MghLQQTa0QQoiLo0ROCCEujhJ5C4miiP/+9xzCwz+Bp+c7mDhxLVJTS5wdFiGEUCJvqX/84xiefHInsrIqUVPTgP37czFq1Ne4cOGas0MjhHRxlMhbQK834u23D1ttk6bTcXjjjYPOCYoQQn5DibwFCgqqAVi3fRVF4PRpx0+v1NUZ8PLLexEQ8D4CAt7H88//gpqaBofflxDiGqj8sAX8/NwtGkndLCTE26H3FgQR48b9FxcuXENDAw8A+PTTU9i7Nwdnzz4OmYzeiwnp6igLtIBGo8DixTFQqSyXr6tULF57bbRD771vXw4uXaowJ3EAaGjgkZt7Azt3Zjv03oQQ10CJvIU+/ngqli8fDJWKhVwuRUCABv/9730YNy7Iofc9e7YE9fWc1fG6OgPOnqWqGUIITa20GMtK8eGHU/DPf05CXZ0BXl7KdtkurV8/L7i5sairM1gcd3dn0a+fFwDAaBRw9Gg+DAYeiYl9rD45EEI6N0rkrcSyUnh7u7Xb/e67rz+ee243dDrO3CucYQClksXcuZFITi7AzJnfwWAwzeELgoivv74Xc+ZEtluMhBDnoqmVDk6plOH48UeRkNAbLCsBy0owdGgvHDu2FAAwZcr/UFFRj5qaBtTUNKCuzoBFi35Ebu51J0dOCGkvNCJ3AcHB3jh2bCmqq/UQRZg3efj++3SIovWOPjwvYu3a8/jzn8e2c6SEEGegRO5CPD0td+m5cUNvsyzSYOBRWVnfXmERQpyMplZc2IQJQbAxIIe7uxzTp4e1f0CEEKegRO7CwsK644knhlhsz6ZWsxg1qg8mTQpxYmSEkPZEUysu7oMPJuPuu0OwenUqGhqMWLhwIObOjYJE4vjSSEJIx0CJ3MUxDIOpU8MwdSpNpRDSVdHUCiGEuDi7JXKe5zFo0CDMmDHDXpckhBDSAnZL5B999BEiIiLsdTlCCCEtZJdEXlhYiB07dmDZsmX2uBwhhJBWsEsif+655/DPf/4TEglNuRNCSHtrc+bdvn07fH19MWTIkGbPW7VqFeLi4hAXF4fy8vK23tYlCYKIrKxK5OdXOzsUQkgnwoi2mnW0wiuvvIJ169ZBJpNBr9ejpqYGs2bNwrffftvk18TFxeH06dNtua3LOXToKhYu3ILr1/UQBBH9+3fHDz/MR3Cw/XYYunFDj3PnSuHv747w8B52uy4hpGNoKne2OZHf7ODBg3jvvfewffv2OwqmoxNF8Y56kBcW1qB//0+g1f6+QYREwsDf3x1Xrz5nl+3a3nzzEN555ygUCik4TsDAgb74+ecF8PFRt/nahJCOoancSZPaLbB+/QX06/cvSKVvoVevD/DVV6mt+vo1a85aNbcSBBE1NQ3Yty+nzfFt3pyBt98+DL3eiOrqBuh0HM6cKcbcuZvafG1CSMdn10Q+duzY247GXc2GDel47LGfkZdXDVEEiotr8cwzu1qVzPPyqi323GwkCCKKi2vbHOOKFTvAcZZvFEajiBMnCu1yfVt4XsC77x5Hv37/Qrdu/8CCBZuRl3fDIfcihDSPRuS38eqrSdDpLPfM1Ok4/N//JbX4GuPHB1k0tmokCCKGD+8NADh6NB/z5m3C6NFf4733jqO2tqFF175ypQqVlTqbr4miiKoqx7SzXbr0J7zxxgHk5VXj+nU9Nm7MQFzcKpSXax1yP0JI0yiR30Zenu0Kk5KSOvC8dS9wW+bOjUTfvl5QKn9vbaNSsbjvvv6IiPDBZ5+dxuTJ32Lz5gwcOZKP118/gMGDV6Gm5vbJ/NSpYrCs7V+jKALh4d1bFGNr5OdXY+PGdOh0RvMxQRBRV8fhs89c79kHIa6OEvlvNm68iKio/8DT8x2MHv01kpMLAABBQV42z+/VSwOptGU/PoVChhMnHsXLL49EeHh3xMb2xAcf3I116+6HVmvACy/8Ap2OM/cWr683oqioBp99duq21+7d2wMsK7X52uTJoU2+1hbnz5dCobDut6bXG3H0aL7d70cIaR4lcgCff34KS5ZsQ0ZGOWpqGnDkSD4mTlyHlJRC/O1vE+DmZpm0VCoWb789vlX30GgUeOONsbh06Wmkpj6Bxx+Pg1QqwZkzJZDJrJNtfb0R27Zdvu11R44MRK9eHpBKLatplEoZPv54aqtibKngYG+rOXkAYFkJ+venskdC2luXT+Q8L+BPf7I9D/7KK/sxZ04k1q69HyEh3pBKGfTt64kvvpiBxYtj7XL/bt3cmpyi8fW9fekgwzA4cGAxhg8PhEIhhZubDIGBHti580H062f700RbRUX5YvBgP8jllm9AcrkUzz47zCH3JIQ0rcv3I6+o0KG+3mjztbS0awCAOXMiMWdOpEPuHxXlg6AgL2RmVoDnfy/pV6nYFifFgAANjhxZgrIyLXQ6Dn37et5RvXtrbN/+IJYt+wk//ZQFAOjXzwtr1sxESEg3h96XEGKtyydyb2+3JnfT6dvX0+H3ZxgGO3YsxNSp3yIvrxpSqQQcx+Ovfx2PceOCWnWtlozg7cXTU4lNm+ahvp6DXm+Et7dbu92bEGKpyydyuVyKZ54Zio8/PmkxveLmJsOYMX3xwgt7MGZMX8yYcZfDRrl9+ngiPf1JpKVdQ0WFDvHxveDhoXDIvezNzY2Fm5t1aaU9iKKpN41UKkFIiLfDP2UQ4qrsukS/pTraEn2eF/DnPx/ERx+lwGAwQqNRoK7OYLGIp0cPFbKynqaRZzs5ebII8+ZtQnm5qUa+Vy8NNm+eh+jonk6OjBDnoSX6zZBKJfjrX8fj+vWXce3ai9BoFFYrMSsqdBg37r/tFpMT3l+blZ5ehv37c3D9umMWGN2sqqoeEyeuRV5eNXQ6Djodh+zsKowb91+rh9KEEErkFmQyCfR6Y5NLzc+fv9aiRTp3ymgU8PrrB+Dt/Q6k0rcwZMgXOH68oMnzDQYeW7dewhdfnMbFi2UOiamkpBaDBn2BYcNWY/bsjQgI+AB//ethh9yr0fffp9us5DEYePz4Y6ZD702IK+ryc+S3EgQRTQ2GGcY0WnTU/PWKFTuwfn2aecXk2bOlmDRpHY4fX4qYGD+LczMzyzF27DeorzeC50UIgoDx44PxySdTERRkv9a499+/Aenp12A0/v5D+fvfjyImpifuuSfcbve5WXFxrcWq0UYNDUaH9Y4hxJXRiPwWAQEaeHjIbb6mVJpqtB2hslKHb79Ns0pgOh2H2NgvMGnSOuTmXgdgmna5997vUV6uQ22tATodB72ex86d2QgP/wTx8V+isLCmzTFdvXoDaWmWSbwxpg8/PNHm6zdl5MhAuLtb/w7kcilGjuzjsPsS4qookduwbt0sq2MMA/z731NbvCy/tXJzbzRZBgkASUm5SEhYjbo6A7KyKlFUVGvzkwPHCUhNLcHEiWst5tn1eiO+/joVs2dvxNNP78SFC9duG1NVVX2TvdIrKmw36rKHyZNDER3d02JFrUrFYtSoPuYmY4SQ31Eit2HmzHCcPbscCQm94e2tRHR0T/zyy0NYtmyww+65c2dWsw/yBEGEVsvh++/T0dDAN5v0eV5EUVEtUlKKAJhG0AkJq/HMM7uwZUsmPv/8NBISVmP9+gvNxjRggK/N4wqFFPfcc1cLvqs7I5Ew2L9/Ed56axwGDPBFTExPvPPOBPz00wIqQSTEBpojb8KgQf5ITn60VV+TmVmO1avPoqxMixkz7sKsWREtalpVV2fAO+8cu+15Wi2HjIxyLFkSC7WaRV2doclzJRIGpaV1AIAvvzyDrKxK8wpWnheh0xnxxBPbMWtWhEVXxpvJ5VJ8+ul0PPHEdtTXm5p6KZUy+Pio8PzzI24bb1solTK88MIIvPCCY+9DSGfQKUfkPC+goKC6xT297eG779IxZMgq/PvfKfj22wtYtuwnjB79DRoabC//v9mFC9dalPDd3eWIjfWDVCrB+vWzoVazVs2yGhkMPIYO7QXA1NnRVhsChmFw+nRxs/d8+OFoHDiwGPPnRyExsQ9ef3000tJWoFs3qqcnpKPodIl8w4Z0+Pu/j/79P4GPz7tYuHCL3WuPdToOWVmV0GoN5n8/9thPqK83mh8M1tVxSEu7hrVrz9/2ej17uoPjrHcQuplMJoG3txJz55p6vowfH4TLl5/Gn/6UCA8PuUVPcrWaxYoVcQgI0AAwLae3hecFaDS2H+zebOjQXvjuuzk4cmQJXnllFLy8bF/P3nJyrmPJkq0IDf03Jk5ci/37274tHiGdUaeaWjlyJA9Ll26zqPzYsiUTej2HH36Y3+brC4KIP/1pP/797xRIpRLwvICnnhqKKVNCbD4E1ek4fPddOh57bEiz1w0O9saQIf5ISSmyaA8rk0nAshJIJAxmzgzHBx9MtlgO36uXB956azxWrhyB998/ji1bLsHTU4Fnnx2GefOizOc99VQ8Dh/Os9j8mWEAf3/3DrtSMju7EnFxX0KrNYDnRVy5ch3JyYX47LNpWLTIPp0nifOJooicnBxcunQJcrkcMTEx8PW1/WyGNK1TJfK///2oVfmeXm/Ejh3ZKCvTtrmp1PvvJ+Pjj09aTFP85z+nUFfX0ORKzJaMeAFg69YHMGfOJpw4UWgeXf/rX1OwdOmg236tl5cSf/nLePzlL7Z7pE+ffheefXYY3n8/2dx61tNTgR07FnbYh4d//vNB1NUZIAi//1x1Og5//OMePPhgdJPVNKTleJ5HXV0dVCoVWNYx/XKaI4oiNm3ahF9//RUcx4FhGJw8eRJTpkzBkCHND36IpU6VyBvrrG8lkTC4evVGmxP5e+8dt9m3fOPGDHh4KFBba/nwUa1m8cQTcS26dvfuKhw4sBiFhTWoqNAhIqKHzV147tTbb0/A008PxbFjBeje3Q2jR/d1WCmlPRw+nGeRxBvp9UYUFtY4rNd6VyCKIpKTk3Ho0CGIoghRFBEfH4+JEydCImm/v4ns7GxzEm+My2g0Yvfu3YiMjISbW+uewwiCAIZhOuzgxJE6VSJPTOyLX3+tslrAUl9vxL33fo8TJx5F3753ngCa2uT4+vV6HDjwOCZOXAe93ghRBIxGHs88MxRTp4a16h69e3ugd2/HLDry99c4rK+6vfn5uaOoyHoVJ88L9KC1jc6fP4+DBw+aEygAnD59GjKZDOPHt27nq7a4ePGiRQyNJBIJcnJyEBUVZeOrrF29ehU7d+5EeXk5WJZFfHw8xo8fD6nU/tsc3k59fT1yc3Mhk8kQHBwMmax9UmynSuR/+lMiNm68aLMfSnm5FkuWbENS0uI7vv7Agb44d856IU1kpA+io/1QVLQS+/bloKqqHmPG9HNYQu4KXnklEYsWbbX4BKRUyjBrVoTLtPjtqA4fPmyVQDmOQ0pKCsaNG9duI1qWZcEwjM1pyZYmwNLSUqxfv978/XAch5MnT0Kn0+Hee++1a7y3c+bMGezevdv8qYZhGCxYsAB9+/Z1+L077mfrW+j1RqxffwFvvHEQP/yQYbPKIyjIG6dPP2a1BRlgqp0+ciS/TRUs//rXFKhULG7+O1epWHz00RQAAMtKMXVqGBYujKYk3kazZ0fiL38ZB3d3OTQaOZRK0yKkL7+8x9mhuby6ujqbx41Go80RsqPExsbaTNgMwyA4OLhF1zh69CiMRsvnYkajEenp6dDpHLf6+FZlZWXYvXs3jEYjDAYDDAYDGhoasH79ehgMTa/3sBeXGJEXFFQjIWENamoaUFdngEYjh6+vGidOLEOPHiqLc8PCusPdXY6qKvu3Wx0zph8OHlyMN944hPT0MkRG+uCNN8Zg2LCOsWy8cWRja0TFcTyMRsFhm0A4wsqVw7FiRRxycq6jZ093q981uTN+fn4oKLDuqunu7t6uDz179+6NUaNG4fDhwxZz2w888ECL4ygrK7M5opdKpbhx4wZUqvb5mzl//jx43nYJcXZ2dounie6USyTy5ct/xrVrdeY9LWtrDdDrjXjhhT345pv7rM6fPz8Ka9akwmD4/QcrkTBITOwDlaptf6jx8b2wY8eDbbqGvVVV1eOZZ3Zi8+ZM8LyAyZND8J//TEffvl6ortZjxYod+OEH02vR0T3x5Zf3YMiQAGeH3SJubiyiorpOOdqNGzdw7Ngx5Ofno3v37khMTERAgH1/V5MmTcLatWstRrIsy2Ly5Mnt/qBw1KhRiImJwZUrVyCXyxEWFga5vGWVXgDg7++PiooKq2TO8zy8ve3XBfR2GhpsV66Jotgun3I6/A5BPC9AofirxcbEjdzd5aitfcXq+I0beowYsQYFBTWoqzPA3V0OtZpFcvKjdm3x2hEIgojo6M+QlVVprkGXShl0765CTs4fMGnSOpw5U2LxpqbRyJGR8RRN/3QwlZWV+PLLL8FxHATB9LtkWRZz5szBXXfZt7dNUVERDhw4gNLSUnTr1g1jx45t8XSGvQiCgNraWiiVSigUd/bco7y83Pwza8SyLGJjYzFt2jR7hXpbv/76KzZu3GiVtGUyGZ555hl4eNjnv7WmcqdLjMhNowTrRN7U4MHLS4m0tBXYsSML589fQ3CwN2bPjnCpaYWWSkrKRV5etcVCIp4XodUa8I9/HMP589cskjgANDTw+M9/TuFvf5vQ3uGSZuzbtw8Gg8FiZMdxHHbs2IGwsLA7Gi0XFxfjxIkTFtMM3bt3x5AhQ/DQQw/ZLfbWunDhAnbv3m1+04qIiMDMmTNbPbXj4+ODRx55BLt370ZxcTGUSiUSEhIwcuRIB0VuW0hICIKDg5GTk2NO5izLIjEx0W5JvDkdPpFLpRJMnhyC3bt/tRiVs6zEvFzdFplMgnvv7Y977+3fHmE6TWZmuc0Hv1oth9Oni20unDEYeIftKETuXF5ens2P51qtFjqdDmp169ZBXLx4EVu3bgXP8xbXZRgGp06dwrx58xAaGtrmuFvr6tWr+Pnnny1Gr5cuXQLP85g3b16rrxcQEIClS5faM8RWYxgG8+fPR1ZWFi5evGj+VBAYGNgu93eJqpVVq+5Br14e0GjkkEoZaDRyhIR0w7vv3u3s0JwuMtLHZsMttZpFYmKgzSTv5ibrMA9oye+aezDXmnljwDRtsX37dhiNRqs3h8Z5261btzplb1hb5Y9GoxHZ2dnQarXtHo+9MAyD8PBwzJo1C/fcc0+7JXHABUbkgGnXnl9/fQY//XQZly9XYuBAX0ybFtahVya2l3HjghAc7I1LlyrMUyhSKQMPDwWefTYBJ08WY8+eK+a2AhKJKck//jgtge5oRowYYZ5uaCSTyRAVFdXqKYfKykrzPHtTOI5DeXm5ubdJXV0djh07hitXrkCj0WDEiBEICQlp/TfSBFEUceDAAeTm5tp8XSqVora2ttWfPIiLJHLAVKM9e7ZrrEpsTxIJg0OHHsHKlb/8tmmxiGnTQvHxx9OgVsuxceNcvP32YXzxxRnodBwmTw7Fu+9OQvfuVMrX0QwaNAhVVVVISUmBVCoFz/MICQnB9OnTW30tpVLZZDlcI0EQzCP92tpafP7552hoaADP8ygvL0dBQQEmTpyIoUOH3tH3c6vMzEycONH0FoGCIKB79+52uVdX4zKJvKPS6404e7YEnp4KREb6OKXPg5eXEl99dS+++sp6JZtcLsWbb47Dm2+Oa/e4SOswDIOJEyciMTERFRUV8PT0hEajuaNraTQa+Pn5obi42Ob0CcMw6NGjB7y8TC0rjh8/Dr1ebzGK5zgO+/btw6BBg+xSX56cnNxkKZ5MJsPo0aOd0ryrM6BE3gbffpuGJ5/cAYZhwPMC+vTxxI4dD3a6EkfSvpRKJXr3vvNnGDzPY+vWrSgtLbV6TSKRQCqVQqVSYf7831s7X7lyxeZUDMMwqKiogL+/f5P3a2howKlTp5CZmQk3NzcMHTrUZrlkUystGYbBuHHjMGJEy3aDEkURV69eRWVlJXx9fREYGNglG2XdjBL5HUpNLcHjj2+3WPJ/+XIlJk5ch19/fabL/2ER5zl69Ki5CqSRRCJBSEgIBgwYAI1Gg379+ln8jWo0GpSXl1tdSxCEZuesDQYDVq9ejRs3bpgXGOXn52PEiBEYO3asxbl33XUXTp48afWGoVAokJCQ0OT1z5w5g8zMTCiVSsTExODw4cO4ceMGBEGARCJBjx49sGjRojuuRbena9euISkpCUVFRfD09MSYMWPsvgbAli73tLCwsAb5+dVtflr/yScnoddb9ngQBBFlZVqcOFHYpmsT0hanTp2y6j8iCAJycnIwYMAABAUFWQ00RowYYTWtIZFIEBgYCJZlkZqailOnTqG6utrinHPnzqG6utrifhzH4dixY1YVKImJiVCr1eb+KgzDQCaTYcaMGTbb53IchzVr1iApKQkFBQXIzs7GDz/8gPLychgMBnNfk2vXrmHfvn2t/0HZWWlpKdasWYOsrCxotVoUFxdj8+bNSE1Ndfi9u8yIPDOzHPPnb0Z2dhUYBujTxxPffz8HsbF+d3S9kpI6m/2yJRIGFRXt16yHkFs11aRJEATzKPZWISEhmDRpkjkhCoKAwMBAxMbG4oMPPjB3KdyzZw9Gjx6NUaNGATD1EbE17y2VSlFYWIjw8HCIoojc3FxcvnwZUVFREEURJSUl8PT0REJCQpMtCM6fP4/r169bvEnYGoDxPI+0tLQ7eihsT0lJSTa7Su7duxcxMTEO7fXeJRK5Tsdh9OhvUFmpQ+PfweXLlRg79hvk5T3X5J6WzZkx4y4cOpRn1U2xocGIhEzGTXUAACAASURBVASq0SbOExQUhKysLKvjvr6+zbaHjY+Px6BBg1BeXg61Wg25XI7333/fanR/5MgRhIaGwt/fHxqNxmYrWlEUoVarrXYBkkgkkEgkmDZtGgYNGgS9Xo/6+nqbm0hkZWW1uE/J7Uot20NRUZHN4xzHoa6uzqErPLtEIt+69ZJ5w4ebGY0CNmy4iOXLW19T/cgjsfj445PIy7thrtFWq1m8+OII+Pg4rg5WFEUcOpSHn3/Ogrs7i4ceikZYGJVskd/dfffdyM/PB8dx4Hne/IBzxowZt/1amUxmfrB54cKFJqc80tLS4O/vj/j4eFy4cMEi2TMMA7VajV69eiErK8tiF6DGTwU7duzAmTNnUFJSAoZh4Ovri1mzZqFHjx7m6zT1JnErhmEQFta6DVwcwcPDo8kHuq3d7ai1usQceVFRjdV8NmBaxl5QUG3jK25PpWJx8uQyvPnmWAwdGoApU0KwceNc/PnPY9sYbdNEUcTChVswY8Z6fPhhMv7+96OIifkc33zj+Dk40rEUFxfj6NGjOHPmDOrrLVs2d+/eHU8++SSGDx+Ofv36IS4uDitWrGh1JUxzdeiNr/n7++Oee+6BXC6HQqEAy7Lmh48MwyA9Pd3mqJrneRQVFUEQBPA8j5KSEnz11VdoaPh9U5i4uLgm+5U3zuezLAu1Wo0pU6a06ntzBFvlkzKZDLGxsQ4vq+wSI/KhQ3tBoZDCaLT8+OXuLsfw4bdfRpucXID169MBAA8+OMD8NRqNAi++OBIvvtg+DXp27/4VP/10GVpt424oAjhOwJNP7sR990XAy6v1U0TEtYiiiK1btyIzMxM8z0MqleKXX37BggULEBQUZD5Po9FgwoS2NUULCwvDjh07rI6zLGvRXzs6OhqRkZEoKSmBUqmEj4+P+bXWbHVmNBpx8eJFDB48GIDpTWL69OnYuXMnGIaBIAjQaDSYM2cOCgoKUFZWBj8/P0RHR7e6hYEjREREoK6uDklJSeb+NrGxse3yJtMlEvno0X0RH98LKSmF5mkQpVKGiIgemDy5+SXIL720F59+egr19abk+dVXqXjyyXi8++4kh8d9q+++Szcn8ZvJZBLs3XsFc+c6tnk9cb7MzExkZmZaTFUAwMaNG/HCCy/YdZ9KtVqNu+++G3v27DFPibAsi4EDB6JPnz4W58pkMpu9RQYNGtTk3py34jgO169bbqAeExODyMhIFBcXQ6FQoGfPnmAYptm6dnvKy8vDqVOnUF9fj8jISMTExNz2OcOQIUNQW1sLlUrVbgucukQiZxgGu3cvxEcfpeCrr1IhCCIWLYrBypXDm+3Xkp5ehk8+OWlO/oDpwemnn57E4sUxGDCgfTc8UCplYBhYzfUzDGxub0c6n3PnztlMiqIooqCgAP369bPr/eLj4xEUFGSeB+/fvz969+7d4nUSffr0wYgRI3Ds2DHzLkCNbz63PkSVy+U2K1hYlm2XfS9vdezYMRw6dMj88y4oKMDZs2exZMmSZpO5RCKBp6dne4UJoIskcgBQKGR46aWReOmllk+D7NiRZdHnuxHHCdi+PavdE/nixTH43/8uWFXKCAIwaZL9mhuRjssZ3Qp79OiBcePuvMXD2LFjERsba94F6K677sK6detQWlpqnmuXSqXw9PREeHi4vcJuE51Oh4MHD1rVx5eXlyM9PR2xsbFOjM5al3jYeaeUShlkMuuRh0zGQKls//fAkSP74Pnnh0OplMHNTWbe+WjLlnlt3sKOuIaYmJgmP663Z9vU1vLy8sKQIUMwcOBAKBQKLF68GMOHD4dGo4G7uzvi4+OxdOnSZmutOY7DmTNnsHnzZuzdu9dqGsae8vPzbU5TcRyHzMxMh933TnWZEfmdmDMnEq+8st/GK0yzm1o40ltvjcOSJbH45ZcrUKtZ3Htvf3h4KGA0CnjnnaP45JOTqKlpQGJiH3z44eQutd9lVxAVFYXMzEzzQhyZTAaGYTB37ly7zo87GsuymDBhQosfyOr1enz55Zeora0116OfOnUK8+fPt2ur3UZKpbLJZmPttaFza1Aib0avXh5YvXomli37yTyXbjQKWL16Jnr1sl9x/9WrN/DBB8k4e7YEMTE9sXLlcISEdGvy/KAgbzzxRJzFscce+wkbN16ETmf6KLhvXw6GD1+DCxdWoG9fL7vFSpyLYRjMmTMHhYWFyMnJgVKpxIABAzp9D+/jx4+jurraPBXT+PB169atWLlypd17G/Xp0wcKhcJqlaxUKkVcXFwTX+U8lMhv48EHB2LKlFDs2pUNUQSmTQtDt272Ke4vLa3DkSN5WLp0GxoaeHCcgJSUIqxdm4YDBxYjLq5lu6eXlNTiu+/S0dDwe92vKJpa7H744Qn861/Or7El9sMwDAIDA5ucShEEAefOncOZM2cgCAKio6MRHx/fqlLAjiYjI8NmXXtDQwMqKystFhLZg0QiwcMPP4xvv/0Wer3+tw6nPCZPnoxevXrZ9V724Lq/2XbUrZsbFi6MBgAcPpyHf/7zGPLzqzF+fBBeemkkAgJa1zO6pqYBDzywGUlJuTAaBYu9SI1GAXV1Bjz11E6kpCxr0fUyMyugVMosEjkA8xuDo+j1Rnz/fTr27r2CwEBPLF8+BMHBnbeFb15eHg4dOoSKigr4+flh7NixTfYJcaYffvjBogdKRUUFMjIysGTJEof2+3Ckpp4LiKLosBpyHx8fPPfccygsLERDQwMCAwM7RIdFWyiRt8LateewYsVOc9XIpUsV+PbbNJw79wR69275VMuDD/6ApKRcq8R7s1OniiAIIiSS239kDA3tZvNaUimDgQNtz5FXVuqweXMGamoaMHlyKKKje7Y4fgCorW1AQsIa5OXdgFbLgWUl+Pjjk9iyZR4mT27/DX0dLSsrC5s2bTJXMdTW1uLq1at4+OGHO9RDxpKSEqtGVkajEWVlZcjOzraqChEEATqdDm5ubh16jn3o0KHYtWuXxffVuLTfkT1MGj/9dHSu+fbsBBzH49lnd1uU/nGcgOrqBvz1r4dbfJ2yMi327ctpNokDphYALUnigKmT45QpIVaVNEqlDM8/P9zq/L17r6BPn39h5co9ePXVJAwfvgaPP769VaVtH32Ugpyc6xarTHU6Dg8//CN43vkNjOxt9+7dVnXPHMdhz549TorItvz8fJu/R4PBgKtXr1ocS01NxXvvvYePPvoI//jHP8wLfzqi2NhYDBgwADKZDHK5HHK5HF5eXpg3b56zQ+sQaETeQleuXIfRaP0fiNEoYM+eKy2+Tnm5FnK5tNlE7uYmw2OPta6R1/r1s/H883vwzTfn0NDAIyrKB59/PgPh4ZZzh3q9EXPmbLJ6Q/rf/9IQG9sTSUm5OHGiCEFBXnjttdFN1qdv2HDRZv+a+nojMjLKMXBg60b4HRnP87hx44bN10pKSto5mua5u7vbnD6RyWQW28adPHkSu3fvtkj6p0+fBmBqutXRMAyDmTNnYtSoUSgsLIRGo0Hfvn1pA5ffUCJvoe7d3cBxtpOvv797i68TGtp0NYpcbmrxOXVqKN55p3V9MtzcWPznP9PxySfTwHE8FArbv9pDh67aPK7VcvjDH3ZBEEwbZBQW1uC++zbgiy9m4KGHoq3OV6ttz1nyvNDpatolEglYlrXZ57ujVYuEh4fbnCJhGAbR0abf49mzZ7Fr1y6rcziOw6lTpzB+/PgO+2DU29sb3t6d9znMnaKplRby8VFj4sRgq6Xwpta1LV8tqlDI8N57d1skO5lMAi8vBb7++j5cuvQUfvhhfpOJ+HYkEqbZr7W1GUYjo1G0eF2n47By5S82p0qeeireKplLJAxCQ7s1WzrpihiGQUJCgtUDN5ZlkZiY6KSobJPJZHjkkUfg7e0NlmUhl8vh7u6OhQsXwt3dHTqdzmYSv5ler2+naO1PFEUUFxfj0qVLqKmpcXY47abNb7sFBQVYtGgRSktLIZFIsHz5cjz77LP2iK3D+d//ZmHu3E04ciQfcrkUHMfjtdfG4L77+rfqOo3VHe+8cxSFhTWYMCEIr7wyqlUPTO/UmDH9mk3mt6qtNaCsTAt/f8vKnIceisaRI/lYty4NMpkEDAN4eSmxdesD9g65QxgzZgwMBgNOnz4NiUQCURQxcuTIDllT7Ovri2eeeQaVlZXgeR6+vr7mKYicnJxmK1dYlu2QC15aQqvVYt26daiqqoJEIgHP84iJicH06dM7/RQMI7axeUNJSQlKSkowePBg1NbWYsiQIdi6dSsiI5te+RgXF2eej3NFBQXVKC2tQ0SED9zdnd8+s7W2b8/CvHmbIIoiGhp4qFQsWFaKGzesR2JKpQxVVS/Bzc32dMmVK1VITi6En587xo3r12wTss7AYDCgrq4OGo2m3TrbNYfneXOnvZaU4WVkZGDbtm02p4kYhsH06dMxZEjrN1rpCNauXYu8vDyLB7Ysy2Ly5Mku+z3dqqnc2eYRub+/v7mlpEajQUREBIqKippN5K4uMNATgYHt293MnmbMuAtXrvwBGzZcxI0bekydGoq8vGosWbLN4iGom5sMixbFNJnEASAkpPNNpTRHLpejW7eO8f2eOHECBw8ehCAIEEURgwYNwpQpU5odcYeGhjZZnTR+/HiXTXg6nQ75+flWVTccxyElJcVlv6+WsusTjatXryI1NRXDhg2zem3VqlVYtWoVAKC8vNyetyV3wN9fg+eeSzD/e9iw3igursXrrx+AKJqqcRYsGIh//3uqE6MkTUlPT7fa7PfcuXMQRRGBgYEQRRFhYWFW0yRyuRzz5s3Dxo0bzduoiaKIxMTEDjff3xoGg6HJ6ZObdx3qrNo8tdKorq4OY8aMwauvvopZs2Y1e66rT604S0ODEVu2ZOLixXJERvpg1qwIu3dhbGgwIj+/Gj17usPDo2OuYiPAp59+ioqKCpuvNU6xCIKA6dOn22y5qtfrkZWVBYPBgLCwsHbvn21voijiww8/RG1trcVxiUSCIUOGYNq0aU6KzL4cNrUCmD6+zJ49GwsXLrxtEietk51daW6olZlZAUEQodVycHeX4//9v304cWJZq1sENEehkNFmzi6grq6uyddunv/esWMHgoKCrBK1Uqk0lyN2BgzD4N5778WGDRtgNBohiiJkMhnc3NwwevRoZ4fncG1O5KIo4tFHH0VERARWrlxpj5jIb44fL8Ddd69DQ4PRajFSXZ0Bej2Hp5/eiS1b5jspQuIs/v7+yM3Nve15oiji4sWLGDFiRDtE5VwhISF4/PHHcfLkSVRVVSEoKAiDBw+GUtn597Jtc4nBsWPHsG7dOiQlJSE2NhaxsbHYuXOnPWLr8p54Yju0Ws7milLAVPe9fXsWiotrsHNnNtLTy9p8z+TkAtx///eIifkczz67C0VFXacW15VMnDixRVUzgiBYtRbozLp3746pU6di4cKFGDFiRJdI4oAdRuSJiYlO2X6qs9PrTUvdb4fnRQQFfQQ3NxYcJ2DgQF/s3Lnwjlrtbtx4EUuWbEN9PQdRBDIzy7FuXRpSUx+nnuYdTEBAAJYuXYoDBw6guLgYarUaFRUVVq1eRVF0+flvcnudu+jXhbGsBDJZ878eqZQBwwAGg6l5l07H4ezZEixa9GOr78fzAp56ytTZsfF9meME1NQ04M9/PngH3wFxND8/PyxYsADPP/88nnjiiSZ3lj948CANtjq5Lp/ICwqqMWfORqjVf4O39z/wxz/uttrc2BmkUgkefjjaZlWKRAJoNHJIJIxFL3PAlHz37cuxubinOfn51Ta/b54XsW9fTuuCJ20mCAIuXbqEpKQkpKam2lzAcyutVmvzeF1dXZNNv0jn0DE747STmpoGxMV9icpKHXhehE7H4bPPTuPs2RIcOrTE2eHho4+mori4DklJuVAopNDrOYwY0QeTJgUjKsoXjz/+M0pLrf/jlUgY1NY2wMur5fOD3t5uTbaf9fXtWI2hOju9Xo+vvvoK1dXVMBgMYFkW+/btw9KlS9G9e9MVRU31E2+s4CCdV5f+7a5dex51dQaLUW1DA48zZ0pw6lQR4uOdu6WTSsVix44HkZNzHVeuVCEy0sdir9Dt27Pw9dfnYDRaJuAePVSt7tvi5aXEtGlh2Lkz26LFrlrN4qWXWt4U7FZZWZU4fDgPPj4qTJ0aZtV0jFg7ePAgqqqqzPPdHMeB4zj8+OOPWLas6V2jhgwZYrVIqHHzhZtb2NpTWloaDh8+jNraWvTs2ROTJk1yiY0YOpsuPbVy6lRxk9MoFy60vQLEXoKDvTFpUojVhs9vvDEW3bq5madfpFIGKhWL1atn3lGToG++uQ/jxvWDUimDp6cCbm4yvPjiSMyfH9Xqa4miiMce+wmxsZ/j2Wd34+GHf0Tv3h/g4sWO83PtqNLT023uT1lSUtJsZ8KhQ4ciODgYLMuaN2Bwd3fH3LlzHRJnSkoKtm/fjsrKShgMBhQUFGDdunUoKnLc9oLEti49Ih840BdubjLU11uWZzEMg7vu6viLYgICNMjIeBL/+c8pHDyYh9DQbnjuuWGIiPC5o+t5eCiwa9dDKCioRnFxLSIifO54deeGDRfx3XfpFj/b2loD7rnnO1y58odO342uLZr72TT3mkQiwQMPPIDS0lIUFhbCw8MDoaGhDtmnUxAEHDhwwGL0D5g+PSQlJeHhhx+2+z1J07p0Il+yJBZvv30Eer3RXKkhl0sQGtoNI0e6xsfD7t1VeO21MXjtNftd0x5NwT777LR5G7iblZVpkZ5e1ql2EGopQRBw5swZnD59GkajEVFRURg5cqTVhr7R0dFISUmxGJUzDIPevXu3aPNfPz8/+Pn5tTne2tpapKWlQavVIjg4GCEhIeY3krq6OpufGgCgtLS0zfcmrdOlp1a6d1chOflRJCb2gUTCgGUlmDUrAklJi5od+eTkXMfChVvg7/8+oqM/w7ffplF51y1sbQMHmB7ENvVaZ7dlyxbs3bsXZWVlqKqqwvHjx7F69WqrBTtjxoyBr68v5HI5GIaBXC6HWq3Gfffd126xXrlyBR9//DEOHDiA5ORkbNq0CevWrTMnb5VK1eR/I7SDT/vr0iNyAOjfvwcOH14CjuMhkTC37addUFCNIUNWoaamAYIgorS0Dk88sR3Z2ZV4881x7RR1x7dw4UBcuHDNatqKZSUYNMh2vXNnVlZWhsuXL1skbZ7nUVNTg4sXLyImJsZ8XC6X47HHHkNOTg5KSkrg7e2N8PDwdqs84Xkemzdvtpg2MRgMKCwsxPnz5zF48GDIZDLEx8fj1KlTFuexLIuxY8e2S5zkd116RH4zlpW2aFOEf/7zOLRag8UuO1oth3ffPY6ams7fLrOlli8fgujonuaNN+RyKVQqFt9+O+u2C506o6KiIpsjWFu72wOmqZSQkBAkJiYiKiqqXcsHi4uLbX7C5DgO58+fN/97woQJGDZsGORyOSQSCdzd3TFz5kz07dsX165da7Kundhflx+Rt9bhw1fBcdb11nK5FJmZ5Rg2rLcToup4lEoZjh5dim3bLmHPnhz4+7tjyZLYLrvUX6PR2EzkUqkUXl4d62fSuJWdLTfXqkskEkyYMAHjxo2DwWCAQqHA8ePH8e6774JhGPA8j549eyIsLAz9+vWjXe8diBJ5K4WEdMOFC2W49e+8oYG3Kg/s6mQyCWbPjsTs2Z13t6iWCg4OhlKpBMdxFklSIpFg0KBB7R4Px3HIyMhARUUFevbsif79+5tH/QEBAZDL5VarSVmWxeDBgy2ukZ6ejsLCQvTo0QMKhQKHDh2ymGopLi5GcXExkpOT4e/vj4ceeogWJzkA/URb6eWXR+KXX65Y1J8rFFJMmBDULpsnE9ckkUjwyCOPYNOmTSgvLwfDMHBzc8OsWbPg4dG+fzc3btzAmjVrYDAYYDAYIJfLsX//fixbtgxqtRoMw2DBggVYu3YtRFE0b58WGRmJqCjTmgKtVosvv/wSOp0OHMdBJpOB5/kmR/KNdeZ79uzB1KlTaWRuZ3bbIag1XH2HoC1bMvHkkzvMDzzvvbc/1qyZ6ZIbMZP2V1NTA6PRCG9vb6cktHXr1iE3N9fqk8GAAQNw//33m48ZDAZcvnwZOp0O/fr1Q8+ev5eM/vTTTzh//rzVHpkt4enpiYceegg9evRo2zdyG7W1tThy5Ah+/fVXqFQqDB8+HJGRkS79JuLQHYK6mlmzInDfff1RVFQDLy8lNBraEo20XHuPwG8mCIJVEm88npmZaZHI5XI5Bg4caPM6ly5duqMkDgDV1dVYt24dnnvuOYclVa1Wiy+++AL19fUQBAHXr1/Htm3bUFZWhnHjOl91WdcrH7ATiYRBYKAnJXHicppKnq1Jqk016GopvV6P/Pz8Nl2jOSkpKdDr9RZvNhzH4fjx46ivr3fYfZ2FEjkhXYhEIkFoaKhV0pZKpRgwYECLrxMbG2v10FIikaBv376IjY2Fp6fnbVsNODKh5ubm2lx5KpVKce3aNYfd11loaoWQLmbGjBn46quvoNPpYDQaIZPJ4OnpiUmTJrX4GqNHj0ZBQYG55ryxjnzOnDlwd3cHADQ0NGDXrl24cOGC1TQMz/Po06ePXb+vm3l6eqKwsNDqOM/zDusE6UyUyAnpYjQaDZ5++mlkZ2ejsrISvr6+NkfpzWFZFosXL0ZRURFKS0vh7e2N4OBgi2soFArMmDED165dQ2VlpbkskWVZjB49GiqVyu7fW6Phw4cjKyvLohRSIpHA39+/2Z7uroqqVgghDsVxHM6dO4eMjAy4ubkhPj4eQUFBDr/vxYsXsWPHDhiNRgiCgL59+2L27NkOfQNxNKpaIaQD4nkemZmZ+PXXX6FWqzF48OBON2JkWRbx8fGIj49v1/tGRUUhIiICVVVVUCqV5imfzogSOSFOYjQa8c0336CsrAwcx0EikeDkyZOYNWsWIiIinB1epyCRSBxer94RUNUKIU6SmppqTuKAqZbbaDRi27ZtTfb6JsQWSuSkw9i5MxtxcavQrds/MHr01zh61HF1xh3BhQsXrHbYaUTbpZHWoEROOoQNGy5i7txNOHOmBNev63HkSD4mT/4WBw9edXZoDiOX227pIIoiWJZt52juXFVVFYqKiqw2yCDth+bIidOJoogXXthjtRG2TsfhpZf24uTJx5wUmWPFxcUhPz/falTu5uZml63aHK2mpgbfffcdKioqzPuCTp8+HdHR0U6OrOuhETlxOr3eiJKSWpuvpaeXtXM07Sc8PByDBw+GVCoFy7JQKBRQqVR48MEHO3xjJ1EUsW7dOly7dg1Go9HcSXH79u0oLi52dnhdDo3IidMplTK4u8tRXW29w1JAQOdbhdeIYRhMmTIFCQkJyMvLg0qlQnBwcJv7mLSH0tJSVFdXWzXfMhqNSElJsWi+RRyPRuTE6RiGwQsvjIBKZTkvrFKxeP31MU6Kqv14eXkhJiYGYWFhLpHEAVN3wcbplJuJoojaWtufrojj0IicdAh/+tMoGI0C3n8/GUajAKVShjffHItFi2Ju/8Wk3QUEBNgskZTJZAgNDXVCRG1XXV0NnU4HHx8fl9vFyLWiJZ2WRMLgjTfG4tVXR+H6dT26dXPrkps0dwTXr1/H/v37kZOTA6VSiYSEBMTHx1vM26tUKiQmJuLYsWPmh7VSqRTu7u4YMmSIs0K/IzqdDhs3bkRRUZH5U8bkyZMttrXr6CiRkw6FZaXw9VU7O4wuq7a2FqtWrYJerwcA1NfXY9++fSgvL8f06dMtzh0zZgz8/PyQkpICnU6HiIgIDBs2DAqFa/Xo37BhAwoLCy06NO7evRvdunVDv379nBdYK1AiJ4SYpaSkWJVDchyH1NRUjBkzxqpfSXh4OMLDw9szRLu6fv06iouLrdrsNm5C4SqJnD67EkLM8vPzm5z7LivrfKWgWq22yQfMrvTQlhI5IcSse/fuNmvYeZ6Hl5eXEyJyLF9fX5t7j0qlUoSEhDghojtDiZwQYjZ8+HCrEapUKkVgYCC6devmpKgcQxRFyOVyjB8/3qIlgkQigUKhwPDhw50YXetQIieEmPn6+mLBggXw8vKCVCqFVCpF//79MX/+fGeHZjdpaWn48MMP8dZbb+HDDz+ESqXCvHnz4Ovra/40otfrsWnTJmi1WidH2zK0QxAhxIooitDpdJDL5S7VwOt20tLSsH37dosHuizLIjExEUePHrXaGq5nz55Yvny5M0K1qancSSNyQogVhmGgVqs7VRIHgKSkJJtVOUePHrXq3igIAioqKnDt2rX2DPGOUCInhHQZNTU1No9zHGfVNwYwjcrr6uocHVabUSInhHQZHh4eNo8rFAqby/J5noe/v7+jw2ozSuSEkA5DFEXk5+cjOTkZ6enpdt+sYsKECVbTRSzLYtKkSXBzc7NoBMayLBISEqBSqewagyPQyk5CSIfA8zzWr1+PgoICCIIAqVSKXbt2YcmSJXbbQHngwIEATHPl1dXV8PDwwIQJEzBw4ED0798fx44dw+XLl+Hm5oaEhARERUXZ5b6ORlUrhJAO4dixYzh48KDVKNzX1xcrVqxwUlQdC1WtEEI6tNTUVJtTKVVVVU0+pCQmlMgJIR1Cc5MDtpbRk99RIieEdAjR0dE2K0c8PDzg6enphIhcByVyQkiHMHz4cPj4+EAulwMwdVxUKBSYM2dOh9+M2tmoaoUQ0iHI5XIsW7YM2dnZyM/Ph5eXFwYMGAA3Nzdnh9bhUSInhHQYEonE5TersEWv1yMjIwM6nQ5BQUHo1auXXa9PiZwQQhwoPz8f//vf/yCKIniex+HDhxEWFmbXKSOaIyeEEAcRBAEbNmyAwWAAx3EQBAEcxyE7OxsXLlyw231oRE4IIXaSkZGB48ePQ6vVIiQkBGFhYTZr4xv3QY2OjrbLfSmRE0KIHRw5cgRHjhwxt8lNTU1Fenp6s/Xx9mKXqZXdu3cjPDwcIgLmrAAAHZxJREFUoaGheOedd+xxSUIIcRkNDQ04fPiwRa/zxmkUW4uZWJZFbGys3e7f5kTO8zyeeuop7Nq1CxkZGfjuu++QkZFhj9gIIcQllJWVWe11CpiSuaenJ1iWNS92YlkWQUFB5gZe9tDmqZWTJ08iNDQUwcHBAIAHHngA27ZtQ2RkZJuDI4QQV6DRaMDzvM3XfH198eijjyI9Pd1cftinTx+7LnJqcyIvKipCYGCg+d+9e/dGSkqK1XmrVq3CqlWrAADl5eVtvS0hhHQYXl5e6N27NwoKCiwSOsuyGDFiBFQqFYYOHeqw+7d5asXWRL6td5rly5fj9OnTOH36NHx8fNp6W0II6VDmz5+PoKAgSKVSsCwLpVKJe+65x2Kg6yhtHpE3vgs1KiwsREBAQFsvSwghLkWpVGLhwoXQarWor6+Ht7e3zXlzR2jziDw+Ph7Z2dnIzc2FwWDA999/j5kzZ9ojNkIIcTlqtRo9evRotyQO2GFELpPJ8Mknn2Dy5MngeR5Lly51me2RCCGkM7DLgqBp06Zh2rRp9rgUIYSQVqJeK4QQ4uIokRNCiIujRE4IIS6OEjkhhLg4SuSEEOLiKJETQoiLo0TelYgiYLgOCNztzyWEuAxK5F1F3kZgay9gix+wyQs480dK6IR0ErRDUFdQuh84sQTgdb8dMAC/rgIEAxD/qVNDI4S0HY3Iu4ILb92UxH/D64CcrwCuzjkxEULshhJ5V1B3xfZxRgbor7VvLIQQu6NE3hV0jwPQxG4kqt7tGgohxP4okXcFA98CpCrLY1IVMOB1QKpwTkyEELuhRN4VeEcDkw4DPScCrCfgEQ7Efw5EvujsyAghdkBVK11Ft8HAhL139rUVKcD5V4EbFwBNGBD9JuA3wfa5ogjUXDL9f4/+gB03mCWE2EaJnDSv7AhwYMrvVS8NZcChmcCIb4HA+y3PrToDHJkN6CtM/1b0AEZt/m2OHkBVKpD+JnD9vCnJD3gd8Bneft8LIZ0UTa2Q5qW+YLt08exK0+i7EVcD7B8PaPMAXmv6ny4PSJpgeq08GdibCBT+BGivAiW7Ta8V/9Ku3w4hnRElctK862m2j2vzAaHh93/nbQQE3vo8gTe9dnblb28INyV/vh448we7hktIV0SJnDTPzc/2cdYdkNxU8aIvNSXmW/H1pteup9q+Tm02tQogpI0okZPmRb0KSNWWx6QqoP/zlg8yfRIBmZv118vcAJ9RpvlyWyRK4NhC4MQyoOKE/eImpAuhRE6aF/IoMPB1QKYxJXCpCgh/Bhjwf5bn+Y4Begy3rFeXqkzHfEcDkS9Z17JDAohGoGCTqV3A/glAxrsO/5YI6WyoaoU0j2FMSTj8OdNyfqUPIFXaPm/MDlMzrpyvTMeClwKhy02v3fUMoC8DLn1gag0g6E3T5WLjtIpomkNPex0IXgwofdvrOyTE5dGInLSMVA6oA20n8ZvPCX8amHrW9L/wp03HAFMyj/krMLscmHwS6D3rpiR+Ewlr6tZICGkxSuSkfcnUgGd/08iekdo+h9W0b0yEuDhK5MQ5gpdaVr00YqSA36T2j4cQF0aJnDhHt0HAoHdNUzWsByDzAOTewLjd1MiLkFaih51dGVcD6MsBdR/T3HR7u+tJoO8DwLUDpimXnuN/n1MnhLQYJfKuiG8ATj4B5H0PSKSmKpKYv5kSa3tTdAP6zG7/+xLSidDUSld06kkgf4OpBNCoBbhqIPVFoHCb9bk1WcDxRcDPdwEHpwPlx5q/tlFrGuXf3IeFEOJQNCLvarg64Op6UxK/Ga8D0v8K9L7392M30oE9w03L7EXetJy+9ICphW1FMgABCJwNxPzdNDWTsgwo+gkAA7j1AoZ9CfiNb8/vjpAuiRJ5V2OoApgmPojpiiz/fe5l0wj75kZXQj1QvP33f+f+1zTH7RYAVKYAgsF0XJsDHLoHmHLGVG7YGiV7gbN/BKozTWWKka8A4X+g3uaENIGmVroat4AmqkIkpuX0NytPhkUSt0XggPoSyyRufq0BuPxh6+IrOwIcvg+ovghAMK0mPf8n06cFQohNlMibUn/NlFRuHaW6OokMiH33lr4nEkCmAmL+Ynmu0qdl17y1X3kjkQdqLrcuvrTXbPc/z/wnwBtsfw0hXRwl8lsJvKkT37a+pqmBn0KAI/NMlR6dReijQOImoMcI01x24GzTsnnPSMvzIl+20ejKBqkbIArWxyUKU+fD1qjOtH1cFEy7ExFCrNAc+a0y3gHyvjNNCzRunFC8HUh9Cfj/7d17fJTllcDx31wScifcQxIgQAxEJIYQIFIrCATkoghatYXqrtVdq9aqH2m7rbu13SpKcZX1hnTLLvVCta0tFBAvUUBBilEuQUBADSQoECABciPJzLt/nIRc5p0kk5nMZDLn+/nMp2Eu7/vMtD3zzPM+55zsZYEdmy8lzZJba4b9M1QWwb4nwBImX2bWhoJXDU0krLIHPHEOHH29yWzaCvYYSLvXs3HFjYASk4BtsUKPNn4hOKrhs8Xw5f9KVcXBN8PoX0J4vGdjUCrI6Iy8pYPPmPy0r4Ivfhd6W+osFgmE809C7gcw/xhcexAGTJO95xY79JsIudsg5/eyeyVmmNQeH3ILzPwEIgd4ds7LfyMz/KZsUZD+UOsZn4YB782QJZjKIlm3P/R8/a4bXZJR3ZvOyFuqOWt+v+OCXNgLxczDsBjoldH47ykbZfZrGM2bSYy8T27e6H8VfPsNaQ137oB8KVz6Uxj5YOuvK9kKpZ/IuBo4a6CyGIr/BkNu8m5cSnVhGshb6jcRTrznen/PUaEZxN1prZyttxKvkZthtH/L4ZlPwFnnen9dOZzeroFcdWu6tNJS1lOytmup/46z2OSn/fgXAjuujjr5IWzMhtVh8EYC7H/S/MJkV+TJvvHoIWA1+aK1RUHMcN+NSakuSGfkLfXKgFm7peXYmY+hZwZcugh6pgd6ZJ47sxPen9G45l99QjrwVJ+EzMehrEAe65UV/L82kmZLFUVHZZMLsUhwT1kQuHEp5QcayM3EDAveGXhTBY+4drZ3VMKBp+Dw7+Rva7jMfCesDO7iVdYwmL4Vti2E0zvkvrh0mPiS7lpR3Z4G8u6sbA+mmZlGLdSWyt8NWyw/uhXiL5Ptf8EqeojsrqkplXyAiL6BHpFSfqFr5N1ZywSf1jhrpHFydxDeS4O4CikayIORs7a+mFUbLvtl+zIzQRJouls5AqVChAbyYFJbLrXBX4+FP8XD+tH1ha3c6DseJq2FuHbMzO3RcsHQUQOFq2H7D2DPI1Bx1GfDV0p1Dl0jDyZb5kriS8O69tm98N4UGH4nRKdINmVUYvPXJEyFOZ/JlsMdd8GXq8Bomelohdg0SJwNb42H8i9k/7U1HPb/FiatgYRpnfveTu2QKoeluyFmCIz+lXyxKKXapDPyYHH2gDRzcLYo3uWolrICu38Of0+F4rXmr7dYYcwTEDscbDHIf/U2sITDZf8OuR/C4Rfh/OcSxEHWzR2VshOkPXvPq45LMwpPU+JPbYe8q+FEHtSckuSeD2+CL1/27DhKhSidkQeL8i9khtxyO2GDhgC/7XtSG8VusjYe3gtmFcA3b8oe8thLIOm6xj3khaubp7g3qKuQ+uDxo83PXVMGW78rDSYatjOOeRJS72jfe9v1M/PStbsegqHfc98IQykFaCDv2mrLofAVKP1Uys22p5SuxQYnNrmvbGi1QdIcubVkj3S9D2Q23rKQVVMf3gQnN8sMvuEL5ZMfy+x/wNVtj7l0p/n9NaXyJdGjd9vHUCqEaSDvqiqPwcZxUHsOHBWy+8RwgjXCtd9mUwYdn8FecjeUfSbnu8gi6++xqW7GWSwNOFp2B3JUSnasWSCvOi5lgY+tkfK4Fjf/M7SGQVhsR96JUiFFA3lX9cn9kkpPfbq5oxKwQFSKBPILZXLRsmk6OvIUBkx2f9zacjj2d/mCGJgrWawNhn5fCoYdfR2wyuzeHgNX/dX98apPyNKM2ZdLZZHrfXWVckG16hvZ8ggSzLECTdbhbVGQdp8Ec6VUqzSQd1Vfr+diEL/IgMqjcPMFmXV/fLc0Pzbq6oOhBa78s/vKhCe3wKbZ8jzDITP8kfdD5mJ53GKFK1ZJs+NT2yAiAQZOl2YS7sSlm1cdtIab73Q58kdpAG00eY1RW7+2Hg7UAVZIuwcy/tP19UopFxrIuyp3yw1Y5WKixSL1YNLuhm/egrCe0rLN3Xqy4wJsvq5xR0qDz5+RYN10CaTnSLm1hz0KMn4Dex5uvGBpCZMCVpf+xPX5Z/LNk5ksNvlCGXyjXJRtrYmEUqoZr7YDLFq0iJEjR5KRkcG8efMoKyvz1bhUykLpedmUNQwGzWu+Bh4/WrrnpN7Z+kXBE++bdzhyVMIXK70ba/oDcOXr0H+S7IS55F9h5i6IHOj63Lh082xTi13qvEQmaBBXykNeBfLc3Fz27t3Lnj17SEtLY/Hixb4alxrzBMRnSMalLVLWqmPTYNzzHTtey4uRFxnmWw49lTQbpm2SVnDZz0BUkvnzhn6/fumnSa1xi12CfsJU78ehVAjyKpBPnz4du12WAHJyciguLvbJoBSyW2PGP2DyRsj6L0m1n1UAPfp07HgDrm6+Lt3AHg0p3/VurJ4Ij4fp26Dft2Q5xRIGibOkaqHuF1eqQ3y2Rr5y5UpuvvlmXx1OgayD979Sbt4Ki4XxK2DHnXJx0qiVIJ6QC8nXe398d+oqoOKI7IMP7yn3xY2QwO2oBqzB39RCqQBrM5BPmzaN48ePu9z/6KOPMnfu3It/2+12Fixw34llxYoVrFghZVJLSko6Ol7ljaELoO8E+OoP0mQ6+VoYMNWzlmrtZRhQ8EvYv1SWTpy1MPRWGPds45bCzuz7qVQIsRiG2RWw9lu1ahXLly8nLy+PqKj2lUzNzs4mPz/fm9Mqb5z/AvLvheN5MhtOuRWyfiszdF859AJ8+lDz1HtbpCQdZS313XmUCiHuYqdXi5IbN27kiSeeYO3ate0O4irALpyBtybAN2/L8kpdBXy5Et6/Rh4/uQU2XQsbMiQpqfJrub+iCPLvgw2Z8MF34PTHrZ9n3xKT+ilVcGi5dO/xlZoyKbn7WjT8MQK2zJdsU6VCiFcz8tTUVC5cuECfPnIBLicnh+XLl7f5Op2RB0hlMez+BRx5zbWKoi0a0hfB/iUt9oPHQs4f4KOFEvSNWnnMGiFr7sO+b36u12Pc7Be3w42lEBbj/fsxnPBmFpzb32RXjg0i+sN1h3z7C0OpLsBd7PTqYufhw4e9ebnqDMVrpOlyRRH0GiN7zCuL4cirUsvccJjvXrFYmgdxkKBdcwa2mBTYclbD9lvluBNfcd3D3nscnNzk+rqoZN8F2BObpCpks62VDqg7J19Ww2/3zXmU6uI0s7M7+WIl5P+oMRifeFduFrt58G6qZc2W9jqeB5uvlQ72TWUthXcm1Zfdra+hYouC7Gd9d3H17D65iNpSXQWU7vLNOZQKAhrIuwunA3b+1HVdGtoO4tYe0HMUlO7x/LxGrQTNku3S4KLoDcCA5LkweR0cfF7S8uNGSAOLfhM9P4c7cSNkB4zZMpG72ulKdUMayLuLmtOudVTaw9pDygGMfUqaQxx/p5UsUHfHsMMHN8KFk41r6EVvwKl/SKZnZ+0TT5gKUYOh/FDjzNxik6WbIX5MclIqwDSVrrsIi+9gZqQB5w/Auc9lrbv/ZLmQiQfLH3VVUFvWGMRBfgXUnIbiVkrgestilcSiQd+pr55og4TpcM0O31xMVSpIaCDvLmzhcMkPzQtStcZZIxdB350MVcdgylsyix79a7C26Apk6SE1X5pWZrRFS5KRWT3yunJpEdeZevSGzMdgxI8hcY6Uzg2L79xzKtXFaCAPhHOHoODXsOvfZPnBVzIfhx793D9uCZNuPxab62POKtj7mPwdPQhGPwzf/hP0yoKwXtDvSpj6Lsz5XHaDRCVD/OVSxGvEg+ZfIPYYqXbYmUq2wvpR8Pky6Ti052FYly5diJQKEbpG7m+HXoRPH5A1XcMBn/83DLsNsp/zfjdHRaGsU7uwSNDN+R/5O+9q6RDUlOGU3qBNJc2WW0vjX2z+b2ed7N2uqGrS9ccudcUHze/gm2kHw4CP/qn5fnVHlXy2Bb90HadS3ZTOyP2p+qRkSzoaAp4hu0y+/IPMLL11/gtZK3ZhSMGq3mMhegg4zC5mWmTnSkdY7VLRMPl6ZG5ghZ6XwpV/6dza4tUnzdvJGXWyn16pEKGB3J++ftO8bZqjEo6+5v3x40eZ1xa3hkOfHPm7Rx9I+Z7rUogtEi77RcfPHdEfBkyR92cLh/MHIe8qOPhcx4/ZFnsk0m3a7DHN6lShQwO5P7lt32aR9eu6Cll6+eh26UBffcqz40clw5CbWwRpq/x7xH2Nd41fDmk/kjXshpn45PXQK9PDN9RExRHY+aBc9HQ0ue18CMq/6vhxWxMWV1+9sUWDZlsUXHJP55xTqS5I18j9KWk27DDJoLRFQOJMWDcSakoloNsi4bNHZXudJ8ktE34vFxgPPivr4AlTIXMJRCU2PscaBmMelx6ZhqP15srtVfSGeSs5wwlFf5FSAZ3hilXwXq6k6mORLZDJc2UXi1IhQgO5P4XHy17tbQuQH0P1QX3Uz6HwFdlp0XCx0FElt+23wzVtVBpsymqHUT+TW1ssllZ+JXjIcGC6zGEYHU//b4+IfjBzp1RjrCiE3lkQm9p551OqC9JA7m+D5sH1RVD8N1l6SJwNMSnwp17mqfSlu6C2vOsnuCRfD3v+3fV+qx2S53XuuS0W6DtebkqFIA3kgdCjDwz/QfP7bD3ApP4TWHyz9NHZYlNh9CNQ8KvGdHlrGIx6GOLSAjo0pbq7IIgQIWLY7XDgqeYZkhY7JM4InpZol/4UkuZC0Z9lSWXwjdCzkxOClFIayLuM0f8Bp//RmOlpsUDUILl4GUx6joSeDwd6FEqFFA3kXYUtAqbmwel8KNsNMcOh/6TOaYyslOpWNJB3NX2y5dYV1ZTKBdqIBP2CUaoL0UCu2lZ1HLYthJIPAKskHl3xf9DvW4EemVIKzexUbTEMyJsCJzdLyVtnNZQfhvevkb6gSqmA00CuWleyVQpTtdzj7qyBw1pdUKmuQJdWglH5V9IL8/xB6egz/HapbtgZKo9i2i3IWQPnDvrmHIZTbsGwX16pLkj/nxNsTm6B92dJIDVq4fi7cOBJuOYTiBzg+/P1HmuecWqLhgGTvDt2zVnI/5FUfnTWQd8cqSEef5l3x1UqxOjSSjAxDPjoNnBUNPbHdFRKXe6CX3XOOeNGQNK1zSsqWsKkxdrQWzt+XMOQdfajr9U3e3bCqW3wzreg6oTXw1YqlGggDyZVX5u3MDNqpc1ZZ5n4CmT8BmJSITIRUv9FfgGExXb8mKWfQllBfRBvwlEDh1d4N16lQowurQQTexTgdPNYJxbVstoh/QG5+cq5g2AxmUc4q6Fsj+/Oo1QI0Bl5MAnvVZ/tadJIIe1eSdgp+QgqjwVmfJ6Iv8y8vK0tEvpoFUOlPKGBPNhMfBniRkorM3ucpPYnz5edLG8kwqaZsDYVtsyDuirfnttwwufPwJqh8HpP2DQbzu7r2LHiR0tCkbVJQTCLVd5Xy8qQSqlWaSAPNhH9YdZumJIHOb+H2Z9B/4myp9tZDbVn5T+/2Qj5bbQ7c9TA7ofhL/3gtWjYPFcaOLvz6UOw62fSwKHunPQgfSsHyr/s2Hu5ag2k3SO/NGyRkHQdzNghF1KVUu1mMQyz/lydKzs7m/z8fH+ftvtaO9w8mFoj4Dul7svgbpkH37wlnYjkBbIffc4B+cJo6sIZ+GtS8zK7IKV2h98B41/w+m0opVrnLnbqjLw7uHDGzQNO6f9p5tyhFkG8/vmOKmkA3dL5g9L8oiWjDk595OmIlVI+pIG8OxgwCdPsy8hECHezTHG2wPWiKUh1w9PbXe+PHiKPubDKmr1SKmA0kHcHmU/Inu6LjZStspNl3Avuy83GXmKesWkNh/gM1/sjB0pikLXFMo0tQjoDKaUCRgN5dxA3AmbuhuF3Qq9MabGW+wEkXuP+NfGjoXc2WFssl1jD4ZK7zV8z8SXJ5rRGyGw+Zhhc9TfoPcZ370Up5TFNCOouYlJg/POevWbyOsi/F468JtmhvbKk1kn0IPPn2yJgwosw7lmoq4SwOG0woVQXoIE8lIXFwhWrYMJKWWYxu5hpxhpmXm3RcMKJ9+HsZxCbBgm5YLX5dsxKKRcayFV9sPUy4NachbzJcP4wOGtliSZyIOR+CBH9fDFKpZQbukaufGPXTyTLs64cnBeg7rxkm378w0CPTKluTwO58o3C1a6VDI1aKF4jSy5KqU6jSyvKO85aOPJHqYtuypDa43pNVKlOo4FcdZyzVmqtnC0wr2RoscKAKXrBU6lOpoFceab2PBx4Co6sliYXtWXmz7NFSY308dqgWanOpoFctZ/jArw9EcoPu0nXb2CHoQthzJMQ1okNL5RSgF7sVJ44+meo+KqNII4spSTP1yCulJ9oIFftd+J999UUm7LYIWFK549HKQVoIFeeiB7sWpvFzLdfl+xPpZRfaCBX7Tf8dmnEbMYSJtmcY5+BxFn+HZdSIU4vdqr2i0qGSeth2wKoKQOcEDUEBs2XNPxB86RuuVLKrzSQK88MmATXH4Xzh6QaogZupQJOA7nynMUqNdCVUl2CrpErpVSQ00CulFJBTgO5UkoFOQ3kSikV5HwSyJcuXYrFYuHUqVO+OJxSSikPeB3Ii4qKeOeddxg8eLAvxqOUUspDXgfyBx54gCVLlmDRbupKKRUQXgXytWvXkpSUxOWXX+6r8SillPJQmwlB06ZN4/jx4y73P/roozz22GO8/fbb7TrRihUrWLFiBQAlJSUeDlMppZQ7FsMwjI68sKCggKlTpxIVFQVAcXExiYmJ7Nixg4SEhFZfm52dTX5+fkdOq5RSIctd7OxwIG8pJSWF/Px8+vbt2+Zz+/btS0pKii9O61clJSX069cv0MMIKP0MhH4OQj8H4a/PobCw0HR3YEBqrQTrNkX9JaGfQQP9HIR+DiLQn4PPAnlhYaGvDqWUUsoDmtmplFJBzvbII488EuhBBJOxY8cGeggBp5+B0M9B6OcgAvk5+Oxip1JKqcDQpRWllApyGsg7INSLhC1atIiRI0eSkZHBvHnzKCsrC/SQ/Grjxo2MGDGC1NRUHn/88UAPJyCKioq4+uqrSU9PZ9SoUSxbtizQQwoYh8PBmDFjmDNnTsDGoIHcQ1okDHJzc9m7dy979uwhLS2NxYsXB3pIfuNwOLjnnnt488032bdvH6tXr2bfvn2BHpbf2e12nnzySfbv38/27dt57rnnQvJzAFi2bBnp6ekBHYMGcg9pkTCYPn06drvsXM3JyaG4uDjAI/KfHTt2kJqayrBhwwgPD+eWW25hzZo1gR6W3w0cOJCsrCwAYmNjSU9P59ixYwEelf8VFxezfv167rjjjoCOQwO5B7RImKuVK1cyc+bMQA/Db44dO8agQYMu/js5OTkkA1hThYWF7Ny5kwkTJgR6KH53//33s2TJEqzWwIbSgGR2dmW+KhIW7Fr7HObOnXvxb7vdzoIFC/w9vIAx2+QVyr/OysvLueGGG3j66aeJi4sL9HD8at26dfTv35+xY8eyadOmgI5FA3kL7777run9BQUFfPXVVxdn48XFxWRlZbWrSFgwcvc5NFi1ahXr1q0jLy8vpAJZcnIyRUVFF//dUCwuFNXW1nLDDTewYMEC5s+fH+jh+N3WrVtZu3YtGzZsoLq6mnPnzrFw4UJefvllv49F95F3kCdFwrqbjRs38uCDD7J58+aQK5hUV1dHWloaeXl5JCUlMW7cOF599VVGjRoV6KH5lWEY3HbbbfTu3Zunn3460MMJuE2bNrF06VLWrVsXkPPrGrny2L333sv58+fJzc0lMzOTu+66K9BD8hu73c6zzz7LjBkzSE9P56abbgq5IA4yG33ppZd47733yMzMJDMzkw0bNgR6WCFLZ+RKKRXkdEaulFJBTgO5UkoFOQ3kSikV5DSQK6VUkNNArpRSQU4DuVJKBTkN5EopFeQ0kCulVJD7f9qNsUtaMhajAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x432 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots(figsize=(6, 6), facecolor=\"white\")\n",
    "\n",
    "ax.scatter(X[:, 0], X[:, 1], c=colors)\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": true
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
